Sorunuzu doğru bir şekilde okuyorsam, kimlikte substring (ID,1,1) + substring (ID,2,1) + ...substring (ID,n,1)
gibi her numara için bir alt küme kapmak zorunda kalmamak gerekir. Hangi inelegant ve sadece tüm ID değerleri zaten aynı uzunlukta ise çalışır.
Bunun yerine, yinelemeli bir CTE kullanın. Bu şekilde, değişken değer uzunluklarına sahip ID alanları için de çalışır.
Yasal Uyarı: Bu teknik olarak hala substring
kullanır, ancak dize bölmek hantal kod gömmek yakala
WITH recur (ID, place, ID_sum)
AS
(
SELECT ID, 1 , CAST(substring(CAST(ID as varchar),1,1) as int)
FROM SO_rbase
UNION ALL
SELECT ID, place + 1, ID_sum + substring(CAST(ID as varchar),place+1,1)
FROM recur
WHERE len(ID) >= place + 1
)
SELECT ID, max(ID_SUM) as ID_sum
FROM recur
GROUP BY ID
belki kullanmak [ 'slice'] (https://prestodb.io/docs/current/functions/array.html) bir dizi oluşturmak ve daha sonra sadece dizi değerlerini toplamak için? – xQbert