我有一张拉数据的表格,如:
ID FID Value
001 20 200
001 20 400
001 50 600
002 50 100
如何编写查询以获取将Value
的所有行ID分配的列?
例如,我想返回以下内容:
ID 20 50
001 600 600
002 NULL 100
答案 0 :(得分:0)
这样的模式:
SELECT
ID,
SUM(CASE WHEN FID = 20 THEN Value END) as sum20,
SUM(CASE WHEN FID = 50 THEN Value END) as sum50 --extend by adding more CASE WHEN rows
FROM
table
GROUP BY ID
..具有在不支持PIVOT语法的数据库中工作的优势。
如果你喜欢PIVOT语法:
SELECT ID, [20], [50] --extend by providing more values in square brackets
FROM
table
PIVOT
(
SUM(Value)
FOR FID IN ([20], [50]) --extend by providing more values in square brackets
) pvt
答案 1 :(得分:0)
如果您有动态FID列表,可以使用动态查询,如下所示:
Declare @cols1 varchar(max)
Declare @query nvarchar(max)
Select @cols1 = stuff((select Distinct ','+QuoteName(Fid) from #data for xml path('')),1,1,'')
Set @query = ' Select * from (
Select Id, [Fid], [Value] from #data ) a
pivot (sum([Value]) for [Fid] in (' + @cols1 + ') ) p '
Exec sp_executesql @query