在单个列中透视表多个列值

时间:2013-12-25 12:12:17

标签: sql .net sql-server tsql pivot

我有一张这样的桌子,

id  PID       VID    Type        PriceA  PriceB
41  297       2      128         70.000  80.000 
42  297       3      256         90.000  100.000    
43  297       4      300        110.000  120.000    
44  297       5      400        130.000  140.000    
45  294       2      128         10.000  50.000 
46  294       3      256         20.000  60.000 
47  294       4      300         30.000  70.000 
48  294       5      400         40.000  80.000
49  294       6      450         50.000  85.000
50  294       7      470         45.000  75.000

我想要做的是使用PID参数进行查询并获得类似

的结果
PID  |        128       |         256       |        300         |        400      
297  | 70.000 / 80.0000 |  90.000 / 100.000 | 110.000 / 120.000  | 130.000 / 140.000 

我已经尝试了几种不同的选项透视表子查询等,但我无法做到。

1 个答案:

答案 0 :(得分:1)

这是一个完整的工作例子:

CREATE TABLE DataSource
(
    [ID] TINYINT
   ,[PID] SMALLINT
   ,[VID] TINYINT
   ,[Type] SMALLINT
   ,[PriceA] VARCHAR(32)
   ,[PriceB] VARCHAR(32)
)

INSERT INTO DataSource ([ID],[PID],[VID],[Type],[PriceA],[PriceB])
VALUES (41,297,2,128,70.000,80.000)
      ,(42,297,3,256,90.000,100.000)    
      ,(43,297,4,300,110.000,120.000)    
      ,(44,297,5,400,130.000,140.000)    
      ,(45,294,2,128,10.000,50.000) 
      ,(46,294,3,256,20.000,60.000) 
      ,(47,294,4,300,30.000,70.000) 
      ,(48,294,5,400,40.000,80.000)
      ,(49,294,6,450,50.000,85.000)
      ,(50,294,7,470,45.000,75.000)

SELECT *
FROM 
(
   SELECT [PID]
         ,[Type]
         ,[PriceA] + ' / ' + [PriceB] AS [Price]
   FROM DataSource
) AS DataSource
PIVOT
(
  MAX([Price]) FOR [Type] IN ([128],[256],[300],[400],[450], [470])
) PVT

输出如下:

enter image description here

我们的想法是建立专栏[PriceA] + ' / ' + [PriceB],然后制作支点。

注意,我已经硬编码了可靠的[Type]值。如果您需要使这个动态化,您可以构建一个动态PIVOT构建SQL字符串,然后使用sp_executesql过程执行它,就像完成here一样。