我正在制作一份报告,该报告将数据整合到4个不同的表格中。对于这个问题,我已将数据合并到2个表格中,并且试图找出使用PIVOT
创建此报告的确切方法。
该报告将根据Clifton StrengthsFinder评估保留员工的五大优势。
这是具有克利夫顿强项名称的表格(总共34行):
如上所述,每位员工都有5个优势:
我想使用PIVOT
生成一个最终看起来像这样的表:
如果扭曲,我不需要团队名称作为一行,它应该是一个列。底部的计数和顶部的主题(执行,影响等)可以忽略。
我正在尝试输出的表的列是PersonFk, PersonName, TeamName, Achiever, Arranger, etc... (34 Strengths)
,表格的每一行都有值(personfk,name,team,如果有人有强度,则为1,否则为0)。 这个表应该是SQL ,而不是excel(对不起,这是我手头上最好的例子,没有花一个小时学习如何使用Paint等)。
我对聚合函数不是很熟悉,而且我刚刚进入更复杂的SQL查询..
答案 0 :(得分:1)
使用this post中的一项技巧。出于您的目的,您可能希望在列名称中使用分隔符来调整“StrngthTheme-Strength'”,然后您的网络报告将针对标题进行解析。
答案 1 :(得分:1)
有趣。 Pivot需要一个聚合函数来构建1-5值,因此你必须将你的内部查询重写为一个联合,并使用MAX()作为一次性聚合函数(一次性,因为每个记录都应该是唯一的,所以MAX, MIN,SUM等应该都返回相同的值:
SELECT * INTO #newblah from (
SELECT PersonFK, 1 as StrengthIndex, Strength1 as Strength from blah UNION ALL
SELECT PersonFK, 2 as StrengthIndex, Strength2 as Strength from blah UNION ALL
SELECT PersonFK, 3 as StrengthIndex, Strength3 as Strength from blah UNION ALL
SELECT PersonFK, 4 as StrengthIndex, Strength4 as Strength from blah UNION ALL
SELECT PersonFK, 5 as StrengthIndex, Strength5 as Strength from blah
)
然后
select PersonFK, [Achiever], [Activator], [Adaptability], [Analytical], [Belief] .....
from
(
select PersonFK, StrengthIndex, Strength
from #newblah
) pivotsource
pivot
(
max(StrengthIndex)
for Strength in ([Achiever], [Activator], [Adaptability], [Analytical], [Belief] ..... )
) myPivot;
该查询的结果应该能够连接回您的其他表以获取人名,力量类别和团队名称,所以我会留给您。您不必将第一个连接作为临时表进行 - 您可以将其作为子内联的子选项进行,因此这可以在一个SQL查询中完成,但如果您可以避免它,这似乎很痛苦。