我正在使用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有关。

我该如何实现?

最佳答案

取消透视数据的一种更简单的方法是使用CROSS APPLY取消对成对的列:

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,则可以将ROSS APPLY与VALUES子句一起使用:
select vendorid, orders, orders1
from pvt1
cross apply
(
  values
    (emp1, sa),
    (emp2, sa1)
) c (orders, orders1);

参见SQL Fiddle with Demo

07-26 04:06