Νομίζω ότι πρώτα θα πρέπει ο gipap να εξηγήσει τί θέλει να κάνει, και εφόσον πρόκειται για άσκηση να δώσει την ίδια την εκφώνηση. Αυτό που ζητάει είναι περίεργο και κάτι μου λέει ότι αυτό που πραγματικά ζητάει η άσκηση (αν πρόκειται για άσκηση) είναι διαφορετικό. Γιατί το select επιστρέφει αυτά τα strings και όχι τους αριθμούς ξεχωριστά? Αν επέστρεφε τους αριθμούς αντί για string θα αρκούσε ένα απλό sum για να τελειώσει κανείς.
Ας μην ξεχνάμε επίσης ότι η SQL δουλεύει με set. Η λύση του Νίκου προϋποθέτει την ύπαρξη cursor ο οποίος θα εκτελέσει τον κώδικα του μία φορά για κάθε εγγραφή που επιστρέφει η select. Αν όμως πρόκειται για άσκηση, ο καθηγητής δεν θα χαρεί καθόλου με μία procedural απάντηση. Μπορεί να δουλεύει αλλά δεν είναι αυτό που ζήτησε.
Αν το Select αλλάξει έτσι ώστε να επιστρέφει ξεχωριστά τους αριθμούς, π.χ. Num1 και Num2, μπορεί κανείς να πάρει το επιθυμητό αποτέλεσμα με ένα απλό sum:
select sum(num1 + num2)
from (select .......... )
Αν υπάρχει σοβαρός λόγος να επιστρέφεται αυτό το string (κάτι πολύ απίθανο) μπορεί κανείς να πάρει πάλι το ίδιο αποτέλεσμα ως:
select
sum(
cast(SUBSTRING(Nums,0,SeparatorIndex) as int)+
cast(SUBSTRING(Nums,SeparatorIndex+1,100) as int)
)
from
(select Nums, CHARINDEX('-',Nums,0) as SeparatorIndex
from (SELECT ...)
) As Numbers
Πρώτα βρίσκω τη θέση του separator και μετά σπάω το string, μετατρέπω σε αριθμό και κάνω sum.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos