Sql server Pivot内聚合中的条件

Sql server Pivot内聚合中的条件,sql-server,pivot,aggregate-functions,Sql Server,Pivot,Aggregate Functions,表#温度: 现在,我希望结果集为: ID Name Reading Sports Dance Swimming 1 xxx T T T F 2 xyz F F T F 3 yyy T F F T 我编写了以下查询: SELECT * FROM ( SELECT * FROM #Temp )SRC PIVOT

表#温度:

现在,我希望结果集为:

ID   Name    Reading  Sports  Dance  Swimming  
1    xxx      T        T      T        F
2    xyz      F        F      T        F
3    yyy      T        F      F        T
我编写了以下查询:

SELECT * FROM
(
    SELECT * FROM #Temp
)SRC
PIVOT
(
    COUNT([ID]) 
    FOR [Hobbies] in ([Reading],[Sports],[Dance],[Swimming])
) piv;
我得到了以下结果:

ID   Name    Reading  Sports  Dance  Swimming  
1    xxx      1        1      1        0
2    xyz      0        0      1        0
3    yyy      1        0      0        1
所以,我想在聚合中使用条件,比如if(count(id)=1,然后是'T'或'F')。在Pivots中有可能吗?如何实现它?

试试这个

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 
试试这个

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 

它按预期工作。谢谢!但我无法在结果集中显示ID,因为我在中用于聚合。是否也可以显示ID。它按预期工作。谢谢!但我无法在结果集中显示ID,因为我在中用于聚合。是否也可以显示ID。
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;
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;