2017-06-30 68 views
0

列的表我有表SQL PIVOT基於與ID的

ID, ID_CLIENT, ID_TYPE, PRICE 

如何創建一個新的「CTE」表在那裏我有1個紀錄的foreach ID_Client。 並且對於一些(5)ID_TYPE是價格類型列。

ID_CLIENT, PRICEFORID_TYPE1, PRICEFORIDTYPE_2,....... 
1    10    15    
2    20    30 

我的第一個因子評分是使用數據透視表,但隨後公佈的1我不能ID_TYPE過濾。

+1

什麼是您的輸入數據?您可以搜索「動態數據透視查詢」... – TriV

回答

1

Assumining你需要動態

Declare @SQL varchar(max) = ' 
Select * 
From (
     Select [ID_CLIENT] 
       ,[Item] = concat(''PRICEFORID_TYPE'',[ID_TYPE]) 
       ,[Price] 
     From YourTable 
    ) A 
Pivot (max([Price]) For [Item] in (' + Stuff((Select Distinct ','+QuoteName(concat('PRICEFORID_TYPE',[ID_TYPE])) 
               From YourTable 
               Order By 1 
               For XML Path('')),1,1,'') + ')) p' 
Exec(@SQL); 
--Print @SQL 

返回

enter image description here

生成的SQL看起來像這樣

Select * 
From (
     Select [ID_CLIENT] 
       ,[Item] = concat('PRICEFORID_TYPE',[ID_TYPE]) 
       ,[Price] 
     From YourTable 
    ) A 
Pivot (max([Price]) For [Item] in ([PRICEFORID_TYPE1],[PRICEFORID_TYPE2])) p 
+0

奧克不知道DYNAMIC,那麼您可以搜索很長一段時間。 雖然這個例子仍然有效,但我仍然需要弄清楚它真正的作用:) –

+1

@FrederikDeClercq對它有幫助。運行子查詢來查看生成的數據,以「饋送」數據透視。 STUFF()部分將只生成列。歡呼:) –