2013-09-06 29 views
7

Birden çok sütun üzerinde pivot etmeye çalışıyorum. Ben şimdiye kadarSQL server Çoklu Sütunlarda Pivot

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 

denedi neler Burada SQL sunucusu 2008. edilir kullanıyorum aşağıdaki I

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

alıyorum sonuç Ama başarmak için çalışıyorum sonucudur belirtilen

id 1 2 11 12 
10 A C B D 

Herhangi bir yardım? Kodumda yanlış olan ne?

+0

olası yinelenen - biz tarafından bir araya Can pivot içinde birden çok sütun var mı? Örneğin. maks (değer), min (col1), toplam (col5). Varsa, bunun için iyi bir örnek var mı? –

cevap

11

Sütunları ilk önce çiftlere ayıracağım, ardından onları çeviririm. Temel olarak, unpivot işlemi sütun çiftlerini (rscd, position ve accd, aposition) satırlara dönüştürür, daha sonra pivotu uygulayabilirsiniz. kod olacak:

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; 

SQL Fiddle with Demo

+1

Bluefeet [T-SQL Çoklu Sütun Pivot] (http://stackoverflow.com/questions/947281/multiple-column-pivot-in-t-sql) ait –

+2

@ Trojan.ZBOT Pivot kullanmanın yanı sıra son sonucu elde etmenin başka yolları da olabilir. Belirli bir sorunuz varsa, en iyi cevabı almak için bir tane gönderirdim ... yorumlarda ileri ve geri gitmekten daha kolay olurdu. :) – Taryn

+1

Downvoters hakkında biraz endişeliyim. Ancak, ( max (değer), min (col1), toplam (col5) pivotunu ([1], [2], [11], [12]) ) piv; –

-3

Dont Kullanımı Kimlik Sütun bakın. Kimlik dışında tüm sütunları almak ve sonra PIVOT tablosunu kullanmak için türetilmiş bir tablo kullanın.

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

Çözümünüzün OP'nin ne istediğine nasıl ulaştığını biraz açıklayabilir misiniz? Sadece eğlenceli olmadığını anlamak için kod kopyalayın/yapıştırın. –