SQL - 将每行的列转换为新的表格式

时间:2014-11-13 20:56:43

标签: sql sql-server sql-server-2008 unpivot

我似乎无法找到更直接的解决方案。我试图用一个包含多个字段的表格和#34; pivot"该信息到具有更灵活的数据格式的表。

我有以下总结表:

Item | Info1 | Info2 | Date1 | Date2
-------------------------------------
item1  info11  info12  date11  date12
item2  info21  info22  date21  date22

我非常希望这张桌子成为一个"很多"表而不是" one",并且需要以下内容:

Item | Info | Date 
--------------------
item1  info11 date11
item1  info12 date12
item2  info21 date21
item2  info22 date22

我正在使用的表有更多字段,但这基本上是我在SQL代码中苦苦挣扎的概念。我可以想象运行一个while循环来为每条记录执行数据透视,或者可能有更容易的事情吗?

1 个答案:

答案 0 :(得分:2)

这实际上不是PIVOTPIVOT函数将行转换为列,您希望UNPIVOT将多列转换为行。

由于您使用的是SQL Server 2008,因此可以使用CROSS APPLY来取消对列的删除:

select 
  c.item,
  c.info,
  c.date
from yourtable t
cross apply
(
  select item, info1, date1 union all
  select item, info2, date2
) c (item, info, date);

请参阅SQL Fiddle with Demo

这也可以使用UNION ALL查询来完成:

select item, info1, date1
from yourtable
union all
select item, info2, date2
from yourtable

请参阅SQL Fiddle with Demo