Pivot 中的聚合条件
Conditions in aggregations within Pivot
Table #温度:
ID Name Hobbies
1 xxx Reading
1 xxx Sports
1 xxx Dance
2 xyz Dance
3 yyy Swimming
3 yyy Reading
现在,我希望结果集为:
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 then 'T' else '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
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;
Table #温度:
ID Name Hobbies
1 xxx Reading
1 xxx Sports
1 xxx Dance
2 xyz Dance
3 yyy Swimming
3 yyy Reading
现在,我希望结果集为:
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 then 'T' else '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
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;