2013-09-06 51 views
7

Tôi đang cố gắng xoay quanh nhiều cột. Tôi đang sử dụng SQL server 2008. Dưới đây là những gì tôi đã cố gắng cho đến nayMáy chủ SQL Xoay vòng nhiều cột

CREATE TABLE #t (id int, Rscd varchar(10),Accd varchar(10),position int) 

INSERT INTO #t Values (10,'A','B',1) 

INSERT INTO #t Values (10,'C','D',2) 

Select id,[1],[2],[11],[12] FROM 
(SELECT id, Rscd,Accd, position , position +10 as Aposition 
From #t) 
As query 
PIVOT (MAX(Rscd) 
     FOR Position IN ([1],[2])) AS Pivot1 
     PIVOT (MAX(Accd) 
     FOR Aposition IN ([11],[12])) AS Pivot2 

dưới đây chỉ là kết quả mà tôi nhận được

id 1  2  11 12 
10 NULL C  NULL D 
10 A  NULL B  NULL 

Nhưng kết quả mà tôi đang cố gắng để đạt được,

id 1 2 11 12 
10 A C B D 

Bất kỳ trợ giúp nào? có gì sai trong mã của tôi.

+0

trùng lặp có thể xảy ra [Nhiều Cột Pivot trong T-SQL] (http://stackoverflow.com/questions/947281/multiple-column-pivot-in-t-sql) –

Trả lời

11

Tôi sẽ xoay vòng các cột thành các cặp trước, sau đó xoay vòng các cột đó. Về cơ bản, quá trình bỏ vòng sẽ chuyển đổi các cặp cột (rscd, positionaccd, aposition) thành các hàng, sau đó bạn có thể áp dụng trục. Mã này sẽ là:

select id, [1], [2], [11], [12] 
from 
(
    select id, col, value 
    from #t 
    cross apply 
    (
    select rscd, position union all 
    select Accd, position + 10 
) c (value, col) 
) d 
pivot 
(
    max(value) 
    for col in ([1], [2], [11], [12]) 
) piv; 

Xem SQL Fiddle with Demo

+1

Bluefeet - Có thể chúng ta tổng hợp bởi nhiều cột trong trục xoay? Ví dụ. max (giá trị), min (col1), tổng (col5). Nếu có, có một ví dụ tốt cho điều đó không? –

+2

@ Trojan.ZBOT Có thể có các cách khác để có được kết quả cuối cùng ngoài việc sử dụng trục xoay. Nếu bạn có một câu hỏi cụ thể, sau đó tôi sẽ đăng một câu hỏi để có được câu trả lời tốt nhất ... nó sẽ dễ dàng hơn là đi qua lại trong phần bình luận. :) – Taryn

+1

Tôi hơi lo lắng về downvoters. Nhưng, chúng ta có thể có trục ( tối đa (giá trị), min (col1), tổng (col5) cho col in ([1], [2], [11], [12]) ) piv; –

-3

Dont Sử dụng cột ID. Sử dụng bảng dẫn xuất để truy xuất tất cả các cột ngoại trừ ID và sau đó sử dụng bảng PIVOT.

4
Select id,sum([1]),sum([2]),sum([11]),sum([12]) FROM 
(SELECT id, Rscd,Accd, position , position +10 as Aposition 
From #t) 
As query 
PIVOT (MAX(Rscd) 
     FOR Position IN ([1],[2])) AS Pivot1 
     PIVOT (MAX(Accd) 
     FOR Aposition IN ([11],[12])) AS Pivot2 

group by id 
+4

Bạn có thể giải thích một chút về cách giải pháp của bạn đạt được những gì OP hỏi? Chỉ cần sao chép/dán mã mà không hiểu nó làm gì không vui. –