2016-10-19 7 views
1

Tabelle #temp:Bedingungen in Aggregationen innerhalb Pivot

ID Name  Hobbies 
1  xxx   Reading 
1  xxx   Sports 
1  xxx   Dance 
2  xyz   Dance 
3  yyy   Swimming 
3  yyy   Reading 

Jetzt möchte ich das Ergebnis setzen:

ID Name Reading Sports Dance Swimming 
1 xxx  T  T  T  F 
2 xyz  F  F  T  F 
3 yyy  T  F  F  T 

ich die folgende Abfrage geschrieben haben:

SELECT * FROM 
(
    SELECT * FROM #Temp 
)SRC 
PIVOT 
(
    COUNT([ID]) 
    FOR [Hobbies] in ([Reading],[Sports],[Dance],[Swimming]) 
) piv; 

Ich habe folgendes Ergebnis erhalten:

ID Name Reading Sports Dance Swimming 
1 xxx  1  1  1  0 
2 xyz  0  0  1  0 
3 yyy  1  0  0  1 

Also, ich möchte Bedingungen in Aggregationen wie If (Anzahl (ID) = 1, dann 'T' sonst 'F') verwenden. Ist es in Pivots möglich und wie wird es erreicht?

Antwort

1
SELECT case when Reading >0 then 'T' else 'F' end Reading , 
     case when Sports >0 then 'T' else 'F' end Sports , 
     case when Dance >0 then 'T' else 'F' end Dance 

FROM 
(
    SELECT * FROM #Temp 
)SRC 
PIVOT 
(
    COUNT([ID]) 
    FOR [Hobbies] in ([Reading],[Sports],[Dance],[Swimming]) 
) piv; 
+0

Es funktioniert wie erwartet. Vielen Dank! Aber ich kann keine ID in meiner Ergebnismenge anzeigen, wie ich sie für die Aggregation verwendet habe. Kann ich auch ID anzeigen? – Nandy

2

Versuchen Sie, diese

SELECT ID,NAME, 
     CASE WHEN Reading=1 THEN 'T' ELSE 'F' END AS Reading, 
     CASE WHEN Sports=1 THEN 'T' ELSE 'F' END AS Sports, 
     CASE WHEN Dance=1 THEN 'T' ELSE 'F' END AS Dance, 
     CASE WHEN Swimming =1 THEN 'T' ELSE 'F' END AS Swimming , 
FROM(
     --your query here 
)t 
2
SELECT 
    Name, 
    CASE Reading WHEN 1 THEN 'T' ELSE 'F' END AS Reading, 
    CASE Sports WHEN 1 THEN 'T' ELSE 'F' END AS Sports, 
    CASE Dance WHEN 1 THEN 'T' ELSE 'F' END AS Dance, 
    CASE Swimming WHEN 1 THEN 'T' ELSE 'F' END AS Swimming 
FROM 
(
    SELECT * FROM @tblTest 
)SRC 
PIVOT 
(
    COUNT([ID]) 
    FOR [Hobbies] in ([Reading],[Sports],[Dance],[Swimming]) 
) piv; 
Verwandte Themen