Wolę t-clausen's answer ale tylko jako ćwiczenie, postanawiam spróbować go jako UNPIVOT
następnie PIVOT
, tak, że możemy napisać, że przy użyciu bardziej ogólnych narzędzi SQL:
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
Zakłada to, że masz kolejną kolumnę (tutaj o nazwie SomeID
), dzięki której każdy wiersz może zostać jednoznacznie zidentyfikowany.
Wynik:
SomeID cnt Cash Credit Debit Account Other
----------- ----------- --------------------- --------------------- --------------------- --------------------- ---------------------
3 2 2.00 1.00 0.00 0.00 0.00
tylko nadzieję powyższe może być bardziej dostosowane do niektórych wariantów wymagań.
Więc o co pytasz? I co próbowaliście? – ryekayo
Czy jakiekolwiek wartości mogą być mniejsze niż 0? – jarlh
4 wybierz 2 kombinacje. – Tarik