2013-08-29 13 views
6

Załóżmy miałem ten poniższej tabeli w SQL Server:Zapytanie - suma z warunkami w klauzuli partycji?

ColA  ColB  ColC 
A  1  100 
A  0  -100 
A  1  -100 
A  0  100 
A  1  100 
A  1  -100 
B  1  200 
B  1  -200 
B  1  200 
C  0  300 
C  1  -300 

A czego szukałem do osiągnięcia (słownie) woud być: Utwórz nową kolumnę, Conditional_Sum = suma ColC dla każdej wartości w ColA gdzie ColB = 1 i ColC > 0

więc ostateczny wynik byłby (dodane w rownum aby pokazać jak mam wartości):

Rownum  ColA  ColB  ColC  Conditional_Sum 
1   A  1  100  200    (rows 1+5) 
2   A  0  -100  200    (rows 1+5) 
3   A  1  -100  200    (rows 1+5) 
4   A  0  100  200    (rows 1+5) 
5   A  1  100  200    (rows 1+5) 
6   A  1  -100  200    (rows 1+5) 
7   B  1  200  400    (rows 7+9) 
8   B  1  -200  400    (rows 7+9) 
9   B  1  200  400    (rows 7+9) 
10   C  0  300  0    (no rows match) 
11   C  1  -300  0    (no rows match) 

Więc moje pseudo-SQL dla tego byłoby:

Sum(ColC) Over(Partition By ColA, ColB=1,ColC>0) as Conditional_Sum 

Jak mogę osiągnąć ten rodzaj związku w moim zbiorze ??

Dzięki !!!!!!

Odpowiedz

20

Spróbuj tego:

Sum(case when ColB = 1 and ColC > 0 then ColC else 0 end) over(partition by ColA) 

Moja odpowiedź zakłada, że ​​suma warunkowego wiersze 7 do 9 ma być 400.

+1

OMG - to jest niesamowite ** ** - dokładnie to, czego szukałem dla!! Nie mogę jeszcze przyjąć odpowiedzi, ale zrobię to tak szybko, jak będę mógł! - ** DZIĘKUJEMY! ** –

+0

@JohnBustos: Serdecznie zapraszamy :-) –

+0

PS - Dzięki za połów na rzędach 7 + 9 sum - zaktualizowałem pytanie. Dzięki jeszcze raz!!! –