基于行ID的组列

时间:2017-08-15 13:02:02

标签: sql tsql

我有一张拉数据的表格,如:

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

2 个答案:

答案 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