SQL扁平化、透视和查询

SQL扁平化、透视和查询,sql,sql-server,tsql,pivot,pivot-table,Sql,Sql Server,Tsql,Pivot,Pivot Table,我将相当多的数据连接在一起,但我需要将这些数据透视,然后从该查询中选择我想要的字段。数据看起来有点像这样: 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

我将相当多的数据连接在一起,但我需要将这些数据透视,然后从该查询中选择我想要的字段。数据看起来有点像这样:

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
ID OrderNo ProductID MetricID度量值
111 G456789 M12345 10 89机器7
111 G456789 M12345 10 90机器ID 2020
111 G456789 M12345 10 91长度1951

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


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



这是数据透视结果集需要注意的问题:

ID订单否产品ID机器机器ID长度
111 G456789 M12345 10 7 2020 1951

因为可以有任意数量的指标,所以我希望它们都在那一行



现在-在我说了这么多,做了这么多之后。。。我只想查询出我需要的变量的结果集。因此,我可能(在上面的例子中)只查询出ID、产品、机器和长度


我相信这是可以做到的。。只是糊涂了怎么了!我们已经玩了好几个小时,试图弄明白这一点:(

尝试在聚合中使用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

发布您的尝试,如果您尝试了一些东西,人们会更愿意提供帮助。加入非常疯狂,而且非常专有。为了我的客户,我无法发布该代码。我可以说的是,我对整个事情进行了选择(疯狂加入结果集),使用“pivot”并查询出我需要的特定指标。但是,我发现它仍然列出了其余指标…因此,除非我知道如何在查询出整个集合后仅选择我需要的指标,否则pivot将无法工作。因此,类似这样的内容:选择ID、产品、机器、机器ID、长度from(疯狂连接结果)pivot(最大结果)对于([Machine]、[MachineID]、[Length])FYI中的公制-这不起作用;)@cbseo为什么不起作用?