2016-12-14 4 views
-4

列のデータを選択私はこのようなテーブルがあります。第一表の行のマッチングと

テーブル1:

ID Varible_Name 
    1 abc    
    1 pqr    
    1 xyz 

を私はこの方法が必要です。 表の第二:

ID abc pqr xyz 
    1 235 345 567 
    2  456 788 090 
    3  567 454 908 
+0

を変更私はPIVOTの楽しみをしようとしていますが、それは適切に動作していません。 – amit

+1

あなたのデータサンプルを修正してください –

答えて

0

あなたはこのような動的PIVOTを使用することができます。

CREATE TABLE #TempTable 
    ([ID] int, [Varible_Name] varchar(3), amount int) 


INSERT INTO #TempTable 
    ([ID], [Varible_Name],amount) 
VALUES 
    (1, 'abc',235), 
    (1, 'pqr',345), 
    (1, 'xyz',567), 
    (2, 'abc',456), 
    (2, 'pqr',788), 
    (2, 'xyz',090), 
    (3, 'abc',567), 
    (3, 'pqr',454), 
    (3, 'xyz',908) 



DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME([Varible_Name]) 
        from #TempTable 
        group by [Varible_Name] 
        order by [Varible_Name] 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT [ID],' + @cols + ' from 
      (
       select [ID], [Varible_Name], [amount] 
       from #TempTable 
      ) x 
      pivot 
      (
       sum([amount]) 
       for [Varible_Name] in (' + @cols + ') 
      ) p ' 

execute(@query); 

結果:

ID abc pqr xyz 
    1 235 345 567 
    2 456 788 90 
    3 567 454 908 

注:あなたは結果セットを保存する場合テンポラリテーブルには、INTOテーブルを使用することができますそして@query

set @query = 'SELECT [ID],' + @cols + 'into ##TempTbl2 from 
      (
       select [ID], [Varible_Name], [amount] 
       from #TempTable 
      ) x 
      pivot 
      (
       sum([amount]) 
       for [Varible_Name] in (' + @cols + ') 
      ) p ' 

select * from ##TempTbl2 

よう enter image description here

+0

ありがとうございました。... – amit

+0

235/x値* 100,456/x値* 100,567/x値* 100 ...など、 この回答は別のテーブルに保存されます。 – amit

+0

@amit私は第1点を得ていませんでした。第2号では、 'INTO'表を使って' @ [SELECT] [ID]、 '+ @cols +'を## TempTbl2から ' 。値を取得するには、 'select * from ## TempTbl2 'を使用してください。 –

関連する問題