Jeśli czytam swoje pytanie poprawnie chcesz uniknąć konieczności hardcode chwycić podciągu dla każdej cyfry w identyfikatorze, jak substring (ID,1,1) + substring (ID,2,1) + ...substring (ID,n,1)
. Co jest nieeleganckie i działa tylko wtedy, gdy wszystkie twoje wartości ID i tak są tej samej długości.
Co można robić zamiast tego użyć rekurencyjnej CTE. Wykonanie tego w ten sposób działa również w przypadku pól ID o zmiennej długości.
Uwaga: Ten sposób nadal korzystać substring
technicznie, ale to nie robi niezdarny hardcode chwycić
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
może używać [ 'slice'] (https://prestodb.io/docs/current/functions/array.html) wygenerować tablicę, a następnie po prostu sumować wartości w tablicy? – xQbert