2013-08-29 3 views
6

Предположим, у меня была эта следующая таблица в SQL Server:Запрос - сумма с условиями в разделе раздела?

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 

И то, что я искал, чтобы достичь (в словах) woud быть: Создать новую колонку, Conditional_Sum = сумма ColC для каждого значения в ColA где ColB = 1 и ColC > 0

Таким образом, конечный результат будет (добавлен в RowNum, чтобы показать, как я получил значение):

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) 

Итак, мой псевдо-SQL для этого будет:

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

Как я могу добиться подобного результата в моем наборе данных ??

Спасибо !!!!!!

ответ

20

Попробуйте это:

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

Мой ответ предполагает, что условная сумма для строк 7 до 9 должен быть 400.

+1

OMG - это ** УДИВИТЕЛЬНЫЙ ** - то, что я искал для!! Я не могу принять ответ, но как только смогу! - ** СПАСИБО !! ** –

+0

@JohnBustos: Добро пожаловать :-) –

+0

PS - Спасибо за улов на строках 7 + 9 sum - я обновил вопрос. Еще раз спасибо!!! –

Смежные вопросы