2017-05-26 2 views
0

Ich habe die folgende Tabelle:Sum (oder count) mehr case-Anweisung

Month | Item | Events | Party | Spirit | Faith | 
May | 123 | 1 | 1 | 0 | 0 | 
June |123 | 1 | 0 | 1 | 1 | 

es ist im Grunde 1 für ja 0 für nein. Ich muss wissen, wie viele verschiedene Kategorien jedes Element in jedem Monat ist

ich folgende Ergebnisse müssen:

Month | Item | Counts | 
May | 123 | 2 | 
June| 123 | 3 | 

Dies funktioniert nicht:

select Month, Item, 
     sum(case when EVENTS = 1 then 1 when PARTY = 1 then 1 when SPIRIT = 1 then 1 when FAITH = 1 then 1 else 0 end) as Counts 
from TABLE 
group by 1,2 

Bitte helfen, danke!

Antwort

2

Sie brauchen keine Aggregation:

select Month, Item, 
     (events + party + spirit + faith) as counts 
from t; 
0
CREATE TABLE #T 
(
Month varchar(10), Item int, Events bit, Party bit, Spirit bit , Faith bit 
) 
insert into #T 
SELECT 'May' , 123 , 1 , 1 , 0 , 0 union 
SELECT 'June' ,123 , 1 , 0 , 1 , 1 

select Month, Item, CAST(Events AS INT) + CAST(Party AS INT)+ CAST(Spirit AS 
INT) +CAST(Faith AS INT) from #T 

Aggregation ist nicht erforderlich. Da die Ereignisse Partei, Geist und Glauben Bit-Spalten sind, müssen wir sie nach int umwandeln und dann hinzufügen.

+0

Bitte formatieren Sie Ihren Code, so dass es besser lesbar ist, auch einige Erklärungen, warum es funktioniert, wäre nett –

Verwandte Themen