2013-08-29 13 views
6

Supponiamo che ho avuto questa seguente tabella in SQL Server:Query - Somma con condizioni nella clausola della partizione?

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 

E quello che stavo cercando di ottenere (a parole) Woud essere: creare una nuova colonna, Conditional_Sum = Somma delle ColC per ogni valore in ColA dove ColB = 1 e ColC > 0

Quindi, il risultato finale sarebbe stato (aggiunta in rownum per mostrare come ho ottenuto i valori):

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) 

Quindi, il mio pseudo-SQL per questo sarebbe:

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

Come posso ottenere questo tipo di risultato nel mio set di dati ??

Grazie !!!!!!

risposta

20

Prova questo:

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

La mia risposta presuppone che la somma condizionale per le righe 7-9 dovrebbe essere 400.

+1

OMG - che è ** ** IMPRESSIONANTE - esattamente quello che stavo cercando per!! Non posso ancora accettare la risposta, ma lo farò al più presto! - ** GRAZIE !! ** –

+0

@JohnBustos: Prego :-) –

+0

PS - Grazie per la cattura su righe 7 + 9 somma - Ho aggiornato la domanda. Grazie ancora!!! –

Problemi correlati