SQL PIVOT,JOIN和聚合函数生成报告

时间:2014-06-23 18:09:41

标签: sql pivot unpivot

我正在制作一份报告,该报告将数据整合到4个不同的表格中。对于这个问题,我已将数据合并到2个表格中,并且试图找出使用PIVOT创建此报告的确切方法。

该报告将根据Clifton StrengthsFinder评估保留员工的五大优势。

这是具有克利夫顿强项名称的表格(总共34行): enter image description here

如上所述,每位员工都有5个优势: enter image description here

我想使用PIVOT生成一个最终看起来像这样的表: enter image description here

如果扭曲,我不需要团队名称作为一行,它应该是一个列。底部的计数和顶部的主题(执行,影响等)可以忽略。

我正在尝试输出的表的列是PersonFk, PersonName, TeamName, Achiever, Arranger, etc... (34 Strengths),表格的每一行都有值(personfk,name,team,如果有人有强度,则为1,否则为0)。 这个表应该是SQL ,而不是excel(对不起,这是我手头上最好的例子,没有花一个小时学习如何使用Paint等)。

我对聚合函数不是很熟悉,而且我刚刚进入更复杂的SQL查询..

2 个答案:

答案 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查询中完成,但如果您可以避免它,这似乎很痛苦。

相关问题