我有一张表,其中包含员工及其位置分为两列,我希望只有一次出现该位置,员工列在左侧列中,直到该位置没有更多员工为止。员工人数从一个地点变为另一个地点。
以下是该表的示例,然后是我想要看到的内容
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
我曾尝试使用交叉表,但显然不会那样。如果有人可以帮助我,那就太棒了。
答案 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