显示所有带有PIVOT的varchar值

问题描述

我需要使用数据透视表显示所有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 |
+--------+-----------+----------+----------+

以上查询在每一列中仅提供1条记录,但我想全部获取

解决方法

您将需要一个额外的列,例如与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;