我似乎无法找到更直接的解决方案。我试图用一个包含多个字段的表格和#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循环来为每条记录执行数据透视,或者可能有更容易的事情吗?
答案 0 :(得分:2)
这实际上不是PIVOT
。 PIVOT
函数将行转换为列,您希望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);
这也可以使用UNION ALL查询来完成:
select item, info1, date1
from yourtable
union all
select item, info2, date2
from yourtable