2013-09-04 28 views
16

Tôi đang sử dụng SQL server 2008 và tôi đang cố gắng tháo dữ liệu. Đây là mã SQL mà tôi đang sử dụng,SQL Unpivot multiple columns Dữ liệu

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 

Và đây là kết quả của mã trên.

VendorID Orders Orders1 
1   4  2 
1   4  3 
1   9  2 
1   9  3 

Nhưng tôi muốn Output của tôi được đường chỉ ra dưới đây

VendorID Orders Orders1 
1   4  2 
1   9  3 

Mối quan hệ từ mã trên được 2 có liên quan đến 4, và 3 có liên quan đến 9.

thế nào tôi có thể đạt được điều này?

+0

FWIW .. đường dẫn sau giúp tôi ... http: // mangalpardeshi .blogspot.com/2009/04/unpivot-multiple-columns.html – Seymour

Trả lời

29

Một cách dễ dàng hơn để UNPIVOT dữ liệu sẽ được sử dụng một CHÉO ÁP DỤNG để UNPIVOT các cột theo cặp:

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

Xem SQL Fiddle with Demo. Hoặc bạn có thể sử dụng CHÉO ÁP DỤNG với mệnh đề VALUES nếu bạn không muốn sử dụng UNION ALL:

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

Xem SQL Fiddle with Demo

+1

wow ... đây là siêu hữu ích nhưng tôi chưa bao giờ làm phiền với nó. Tôi cần phải tăng tốc trên CROSS ÁP DỤNG. –

Các vấn đề liên quan