SQL PIVOT基于具有ID的列的表

时间:2017-06-30 10:07:42

标签: sql sql-server tsql pivot

我有桌子

 ID, ID_CLIENT, ID_TYPE, PRICE

我如何创建一个新的“CTE”表,其中我有1个记录foreach ID_Client。 对于某些(5)ID_TYPE是priceType列。

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

我的第一次尝试是使用PIVOT表,但随后发布1我无法过滤ID_TYPE。

1 个答案:

答案 0 :(得分:1)

假设你需要DYNAMIC

示例

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