没有聚合的枢轴 - 再次

时间:2013-12-17 15:01:08

标签: sql sql-server pivot

我有一个表格,我想要转动一些行。这里有很多这样的问题,但我仍然在苦苦挣扎。

这是我开始的表格。 Starting Point

这是我想去的地方 Ending Point

1 个答案:

答案 0 :(得分:4)

根据您的示例数据,您可以使用带有CASE表达式的聚合函数轻松获得结果:

select userlicenseid,
  startdate,
  max(case when name = 'Other' then value end) Other,
  max(case when name = 'Pathways' then value end) Pathways,
  max(case when name = 'Execution' then value end) Execution,
  max(case when name = 'Focus' then value end) Focus,
  max(case when name = 'Profit' then value end) Profit
from yourtable
group by userlicenseid, startdate;

SQL Fiddle with Demo。由于您要将字符串值转换为列,因此您需要使用min()max()聚合。

您也可以使用PIVOT函数来获得结果:

select userlicenseid, startdate,
  Other, Pathways, Execution, Focus, Profit
from
(
  select userlicenseid, startdate,
    name, value
  from yourtable
) d
pivot
(
  max(value)
  for name in (Other, Pathways, Execution, Focus, Profit)
) piv;

请参阅SQL Fiddle with Demo