我有这样结果的表:动态枢轴多个列
EMP_ID | Boss_ID | Boss_Name | Specialty
1001 001 John sql
1001 001 John c#
1002 002 James c++
1002 003 Sarah sql
1002 003 Sarah python
1003 004 Jesse networking
雇员可以具有可以有多个特色的多个凸起部。
我需要动态调整数据以便每位员工有一行。我需要展示员工,所有老板和他们的第一线专业。
我能够使用动态数据透视和显示多个老板部分,但我不确定如何显示他们的专业名称旁边。
以下是我有:
DECLARE @cols AS NVARCHAR(max)
,@query AS NVARCHAR(max)
select t.EMP_ID
,t.Boss_Name
,t.Boss_ID
,t.Specialty
,'BOSS' + '_' + cast(ROW_NUMBER() OVER (PARTITION BY t.EMP_ID ORDER BY t.BOSS_ID asc) AS VARCHAR) AS b_rn
,'SPEC' + '_' + cast(ROW_NUMBER() OVER (PARTITION BY t.Specialty ORDER BY t.BOSS_ID asc) AS VARCHAR) AS spec_rn
INTO #work
from #testing t
SELECT @cols = STUFF(
(SELECT DISTINCT TOP 100 PERCENT '],[' + w.b_rn
FROM #work w
ORDER BY '],[' + w.b_rn
FOR XML PATH('')
), 1, 2, ''
) + ']'
PRINT @cols
SET @query = N' SELECT EMP_ID,' + @cols + N'
INTO ##work_results FROM
(
SELECT EMP_ID
,Boss_Name
,b_rn
FROM #work
) AS sourcetable
PIVOT
(
max(Boss_Name) for b_rn IN ('+ @cols + N')
) AS pivot_table'
execute(@query)
select * from ##work_results
这给了我:
EMP_ID | BOSS_1 | BOSS_2 | BOSS_3
1001 John John NULL
1002 James Sarah Sarah
1003 Jesse NULL NULL
我所真正需要的是结果是这样的:
EMP_ID | Boss_1 | Specialty_1 | Boss_2 | Specialty_1
1001 John sql
1002 James c++ Sarah sql
1003 Jesse networking
我已经看过其他职位,但他们不是我所期待的。
任何帮助将是美好的。
谢谢!
这是枢轴的限制之一。它不能旋转多列。我更愿意使用动态交叉标签,即使只有一列。对我来说,语法不那么呆板,甚至可以享受轻微的性能优势。这里有一篇很好的文章解释了它的工作原理。 http://www.sqlservercentral.com/articles/Crosstab/65048/ –
我会阅读那篇文章。谢谢回复! – jw133
也许你可以将'pivot_table'加入'#testing'来获得每位老板的特色。不过,您必须为每个老板专栏加入一次。 –