Problem z zapytaniem - sumowanie kolumny z warunkiem

0

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 :)

0

Dla jednego poziomu zadziała. Dla większej ilości uzyj CTE rekurencyjnego .

1 użytkowników online, w tym zalogowanych: 0, gości: 1