我有一张这样的桌子,
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
我已经尝试了几种不同的选项透视表子查询等,但我无法做到。
答案 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
输出如下:
我们的想法是建立专栏[PriceA] + ' / ' + [PriceB]
,然后制作支点。
注意,我已经硬编码了可靠的[Type]
值。如果您需要使这个动态化,您可以构建一个动态PIVOT
构建SQL字符串,然后使用sp_executesql
过程执行它,就像完成here一样。