2013-08-29 35 views
6

Giả sử tôi có này bảng sau trong SQL Server:Truy vấn - Tổng hợp với Điều kiện trong Điều khoản Phân vùng?

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 

Và những gì tôi đang tìm kiếm để đạt được (bằng chữ) woud là: Tạo một cột mới, Conditional_Sum = Sum của ColC cho mỗi giá trị trong ColA nơi ColB = 1ColC > 0

Vì vậy, kết quả cuối cùng sẽ được (thêm vào trong rOWNUM để hiển thị làm thế nào tôi có giá trị):

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) 

Vì vậy, tôi giả SQL cho điều này sẽ là:

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

Làm thế nào tôi có thể đạt được loại này kết quả trong tập dữ liệu của tôi ??

Cảm ơn !!!!!!

Trả lời

20

Hãy thử điều này:

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

câu trả lời của tôi giả định rằng số tiền có điều kiện cho các hàng 7-9 được coi là 400.

+1

OMG - đó là ** TUYỆT ** - chính xác những gì tôi đang tìm kiếm cho !! Không thể chấp nhận câu trả lời, nhưng tôi sẽ sớm nhất có thể! - ** THANK YOU !! ** –

+0

@JohnBustos: Bạn được chào đón :-) –

+0

PS - Cảm ơn bạn đã nắm bắt hàng 7 + 9 tổng cộng - Tôi đã cập nhật câu hỏi. Cảm ơn một lần nữa !!! –