2016-12-14 68 views
-4

我的表是這樣的:1錶行匹配

表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我沒有得到你的第一點,對於第二個問題,你可以使用'INTO'表並修改'@ query'到'SELECT [ID],'+ @cols +'到## TempTbl2從' 。對於檢索值,使用'select * from ## TempTbl2' –