Cześć, nie mogę se poradzić z tym zapytaniem. Próbowałem zwykłego grupowania, łączenia kilka razy tej samej tabeli, ale jakoś nie idzie.
Mam takie dane:
zID | time | parentID
=========================
1 | 100 | NULL
2 | 50 | 1
3 | 200 | NULL
Chcę uzyskać z tego takie dane:
zID | time | parentID
=========================
1 | 150 | NULL
2 | 50 | 1
3 | 200 | NULL
Tzn. zsumować kolumnę time, ale taki sposób, że dodaję wartości z rekordów, których parentID wskazują na zID. Nie wiem, czy trochę nie zamotałem.
Załóżmy, że pole zID jakiegoś rekordu to 1. Wtedy do wartości z pola TIME dodaję wartości z kolumny TIME wszystkich rekordów, których parentID = 1(jest takie same jak zID).
Wiem, że da się to zrobić kursorem i tu nie ma problemów. Ale da się (a jeśli tak to jak) zrobić to za pomocą jednego zapytania? Tzn. bez używania kursorów, funkcji i procedur składowanych.
DOPISANE
Chyba się udało, zapytanie wg mnie powinno wyglądać tak:
select a.zID, (case when a.parentID is null then a.time + b.time else a.time end), a.parentID
from
(
select tiz.zID, tiz.time, tiz.parentID
FROM moja_tabela tiz
) as a
left join
(
select sum(tiz.time) as [time], tiz.parentID
from moja_tabela tiz
group by tiz.ParentID
) as b on a.zID = b.ParentID
Z moich wstępnych testów wynika, że to działa. Ale jakby ktoś chciał dorzucić coś od siebie, to proszę bardzo :)