问题描述
我需要使用数据透视表显示所有varchar值,但不确定是否可行?
我有OCCUPATIONS
表:
-----------+------------+
| NAME | OCCUPATION |
+-----------+------------+
| Eve | Actor |
| Jennifer | Actor |
| Ketty | Actor |
| Samantha | Actor |
| Aamina | Doctor |
| Julia | Doctor |
| Priya | Doctor |
| Ashley | Professor |
| Belvet | Professor |
| Britney | Professor |
| Maria | Professor |
| Meera | Professor |
| Naomi | Professor |
| Priyanka | Professor |
| Christeen | Singer |
| Jane | Singer |
| Jenny | Singer |
| Kristeen | Singer |
+-----------+------------+
数据透视查询:
select NAME,OCCUPATION from OCCUPATIONS
) t
PIVOT( MAX(NAME) FOR OCCUPATION IN ([Doctor],[Professor],[Singer],[Actor])
) as PIVOT_TABLE;
查询结果:
+--------+-----------+----------+----------+
| Doctor | Professor | Singer | Actor |
+--------+-----------+----------+----------+
| Priya | Priyanka | Kristeen | Samantha |
+--------+-----------+----------+----------+
解决方法
您将需要一个额外的列,例如与ROW_NUMBER()
:
SELECT RN,[Doctor],[Professor],[Singer],[Actor]
FROM
(SELECT NAME,OCCUPATION,ROW_NUMBER() OVER (PARTITION BY OCCUPATION ORDER BY NAME ) as RN
FROM OCCUPATIONS
) t
PIVOT( MAX(NAME) FOR OCCUPATION IN ([Doctor],[Actor])
) as PIVOT_TABLE;