tôi thích t-clausen's answer nhưng cũng giống như một bài tập, tôi quyết định thử nó như một UNPIVOT
theo sau là một PIVOT
, để chúng ta có thể viết nó sử dụng nhiều trong những công cụ SQL chung:
declare @t table (SomeID int,Cash money,Credit money,Debit money,Account money,Other money)
insert into @t(SomeID,Cash,Credit,Debit,Account,Other) values
(1,0.00,0.00,0.00,0.00,0.00),
(2,1.00,0.00,0.00,0.00,0.00),
(3,2.00,1.00,0.00,0.00,0.00)
;With Unpiv as (
select *,SUM(CASE WHEN MoneyValue > 0.00 THEN 1 ELSE 0 END) OVER (PARTITION BY SomeID) as cnt
from @t t
unpivot (MoneyValue for MoneyType in (Cash,Credit,Debit,Account,Other)) x
), Repiv as (
select *
from Unpiv u
pivot (SUM(MoneyValue) for MoneyType in (Cash,Credit,Debit,Account,Other)) x
where
cnt >= 2
)
select * from Repiv
Điều này giả định rằng bạn có một cột khác (ở đây, được gọi là SomeID
) theo đó mỗi hàng có thể được xác định duy nhất.
Kết quả:
SomeID cnt Cash Credit Debit Account Other
----------- ----------- --------------------- --------------------- --------------------- --------------------- ---------------------
3 2 2.00 1.00 0.00 0.00 0.00
Chỉ hy vọng ở trên có thể thích nghi hơn đối với một số biến thể của các yêu cầu.
Vì vậy, bạn đang hỏi gì? Và bạn đã thử cái gì? – ryekayo
Giá trị nào có thể nhỏ hơn 0? – jarlh
4 chọn 2 kết hợp. – Tarik