将行转换为具有条件的列

时间:2015-05-06 14:59:57

标签: sql sql-server vba access-vba ms-access-2010

我有一张表,其中包含员工及其位置分为两列,我希望只有一次出现该位置,员工列在左侧列中,直到该位置没有更多员工为止。员工人数从一个地点变为另一个地点。

以下是该表的示例,然后是我想要看到的内容

name      location
MARILIS   ADAMS ST RECREATION CENTER
EDDIE     ADAMS ST RECREATION CENTER
CARMAN    DOWNTOWN OFFICE
DOROTHY   DOWNTOWN OFFICE
MICHAEL   DOWNTOWN OFFICE


location                     EMP1     EMP2    EMP3
ADAMS ST RECREATION CENTER   MARILIS  EDDIE
DOWNTOWN OFFICE              CARMAN   DOROTHY MICHAEL

我曾尝试使用交叉表,但显然不会那样。如果有人可以帮助我,那就太棒了。

1 个答案:

答案 0 :(得分:0)

您可以使用递归CTE对位置分区进行编号,然后使用PIVOT数据:

;WITH CTE AS (
SELECT NAME, LOCATION, 'EMP' + CAST(ROW_NUMBER() OVER(PARTITION BY LOCATION ORDER BY NAME ASC) AS VARCHAR) AS [EMP]
FROM TABLE1)
SELECT LOCATION, [EMP1], [EMP2], [EMP3]
FROM CTE
PIVOT(MAX(NAME) FOR [EMP] IN ([EMP1], [EMP2], [EMP3])) PIV