SQL Unpivot多列数据

前端之家收集整理的这篇文章主要介绍了SQL Unpivot多列数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用sql Server 2008,我正在尝试解析数据,这里是我使用的sql代码,
CREATE TABLE #pvt1 (VendorID int,Sa int,Emp1 int,Sa1 int,Emp2 int)
GO
INSERT INTO #pvt1  VALUES (1,2,4,3,9);

GO

--Unpivot the table.
SELECT distinct VendorID,Orders,Orders1
FROM 
   (SELECT VendorID,Emp1,Sa,Emp2,Sa1
   FROM #pvt1 ) p
UNPIVOT
   (Orders FOR Emp IN 
      (Emp1,Emp2)
)AS unpvt
UNPIVOT
   (Orders1 FOR Emp1 IN 
      (Sa,Sa1)
)AS unpvt1;
GO

这是上面代码的结果.

VendorID    Orders  Orders1

1   4   2

1   4   3

1   9   2

1   9   3

但我希望我的输出是下面所示的方式

VendorID    Orders  Orders1

1   4   2

1   9   3

与上述代码的关系为2与4相关,3与9相关.

我该怎么办?

解决方法

解开数据的一种更简单的方法是使用“交叉应用”来对数据进行分组:
select vendorid,orders,orders1
from pvt1
cross apply
(
  select emp1,sa union all
  select emp2,sa1
) c (orders,orders1);

请参见SQL Fiddle with Demo.或者,如果不想使用UNION ALL,可以使用CROSS APPLY和VALUES子句:

select vendorid,orders1
from pvt1
cross apply
(
  values 
    (emp1,sa),(emp2,sa1)
) c (orders,orders1);

SQL Fiddle with Demo

原文链接:https://www.f2er.com/mssql/83086.html

猜你在找的MsSQL相关文章