2017-02-09 9 views
0

これは私が知っている人気のある質問です。私はピボットテーブルについて学んでいるだけで、どこが間違っているのか分かりません。SQL Serverピボットテーブル、Null結果

create table #test 
(
    id varchar(4), 
    code varchar(2), 
    received_dt varchar(8) 
) 

insert into #test values ('1234','10','20150312') 
insert into #test values ('1234','71','20150312') 
insert into #test values ('1234','C5','20150312') 
insert into #test values ('4321','10','20150312') 
insert into #test values ('4321','71','20150312') 
insert into #test values ('987','10','20150312') 
insert into #test values ('987','71','20150312') 
insert into #test values ('987','C5','20150312') 

select id, [code1], [code2], [code3] 
from #test 
pivot(MAX(code) for code in ([code1], [code2], [code3])) as pvt 

drop table #test 

ご協力いただきありがとうございます。私はこれが簡単になるはずだが、私はそれの周りに私の脳を包んでいるように見えることはできません。中

結果:

ID  Code1 Code2 Code3 
1234 NULL NULL NULL 
4321 NULL NULL NULL 
987  NULL NULL NULL 

欲しい:

ID  Code1 Code2 Code3 
1234 10  71  C5 
4321 10  71  NULL 
987  10  71  C5 

EDITは多くのコード値があります。

+0

投稿した後に初めて – Lamak

+0

感謝の気持ちを込めて結果を投稿してください。 – GibralterTop

答えて

3

あなたはCode1, Code2, Code3値が含まれている別の列を作成する必要があります:

;WITH CTE AS 
(
    SELECT *, 
      RN = 'Code' + 
       CAST(ROW_NUMBER() OVER(PARTITION BY ID ORDER BY code) AS CHAR(1)) 
    FROM #test 
) 
SELECT id, [code1], [code2], [code3] 
FROM CTE 
PIVOT(MAX(code) for RN in ([code1], [code2], [code3])) as pvt; 

あなたがコードの未知の数を持っている場合、あなたは、動的SQLが必要になります

UPDATE:

DECLARE @sql NVARCHAR(MAX) = N'', @cols NVARCHAR(MAX) = N''; 

WITH CTE AS 
(
    SELECT *, 
      RN = 'Code' + 
       CAST(ROW_NUMBER() OVER(PARTITION BY ID ORDER BY code) AS CHAR(1)) 
    FROM #test 
) 
SELECT @cols += STUFF((SELECT ',' + QUOTENAME(RN) 
         FROM CTE 
         GROUP BY RN 
         FOR XML PATH('')), 1, 1, ''); 


SET @sql = N' 
SELECT * 
FROM ( SELECT *, 
       RN = ''Code'' + 
       CAST(ROW_NUMBER() OVER(PARTITION BY ID ORDER BY code) AS CHAR(1)) 
    FROM #test) AS d 
PIVOT(MAX(code) for RN in (' + @cols + ')) AS p;'; 

EXEC sp_executesql @sql; 
+0

ダイナミックな部分は私のトリックでした。どうもありがとうございます! – GibralterTop

関連する問題