SQL Flatten,Pivot和Query

时间:2014-03-05 21:09:18

标签: sql sql-server tsql pivot pivot-table

我正在加入相当多的数据,但我需要转动该数据,然后从该查询中选择我想要的字段。数据看起来有点像这样:

ID OrderNo 产品 ProductID MetricID 指标
111 G456789 M12345 10 89 机器 7
111 G456789 M12345 10 90 MachineID 2020
111 G456789 M12345 10 91 长度 1951

上面的结果集可以包含任意数量的度量标准(50甚至100或更多)。系统是可配置的,以便他们可以添加指标,这意味着我不能真正“硬编码”任何会使SQL无效的东西。


当ID不同时(如上面的111所示),这将是一行。   OrderNo,Product和ProductID也是相同的,但ID是枢轴的关键。



这是Pivoted结果集需要照顾的方式:

ID OrderNo 产品 ProductID 计算机 MachineID 长度
111 G456789 M12345 10 7 2020 1951

由于可能有任意数量的指标,我希望它们都在该行中。



现在 - 在我完成所有这些之后......我将只想查询结果集,只需要我需要的变量。因此,有可能(在上面的示例中)我只查询ID,产品,机器和长度。

我确信这可以做到..只是困惑如何!一直在玩耍几个小时试图找出答案:(

1 个答案:

答案 0 :(得分:1)

尝试在聚合中使用case语句,如下所示:

SELECT ID,OrderNo, Product, ProductID,
MAX(CASE WHEN Metric='Machine' THEN value END) Machine,
MAX(CASE WHEN Metric='MachineID' THEN value END) MachineID,
MAX(CASE WHEN Metric='Length' THEN value END) Length
FROM Table1
GROUP BY ID,OrderNo, Product, ProductID