Przeglądając, jak co dzień, forum 3lance, zauważyłem temat gdzie jeden z użytkowników umieścił funkcję w której wykorzystywał kursor do sklejania wartości tekstowych. http://cdn.3lance.pl/viewtopic.php?f=13&t=1435 Tak troszkę mnie tknęło, bo przecież generalnie kursor mistrzem wydajności nie jest i w miarę możliwości winno się go unikać. Napisałem więc swoje rozwiązanie, które jest bardziej wydajne - być może się wam przyda :)
Przykładowy kod generujący "sklejone" płatności dla pierwszych 49 GID-ów w tabeli płatności.
SELECT DISTINCT tab1.TrP_GIDNumer,
STUFF((SELECT ',' + LTRIM(RTRIM(tab2.TrP_FormaNazwa)) FROM CDN.TraPlat AS tab2 WHERE tab2.TrP_GIDNumer = tab1.TrP_GIDNumer FOR XML PATH('')), 1, 1, '') AS Formy
FROM CDN.TraPlat AS tab1 WHERE trp_GIDNumer < 50
ORDER BY tab1.TrP_GIDNumer
Rozwiązanie trochę bardziej eleganckie, no i pozbyliśmy się nieszczęsnego kursora :P Na dzisiaj to by było na tylko, bo czasu brak :)
EDIT: Jeszcze mały edit - podane przeze mnie rozwiązanie będzie działać od SQL w wersji 2005.
Brak komentarzy:
Prześlij komentarz