Sql server SQL Server查询-如何透视此数据集
我一直在胡闹,只是没有想出任何可行的办法:(我有一个简单的问题:Sql server SQL Server查询-如何透视此数据集,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我一直在胡闹,只是没有想出任何可行的办法:(我有一个简单的问题: SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress 这就引出了我想要透视的数据(下面是该数据的子集): 我需要它看起来如下所示: |---------------------|------------------|--
SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d
inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress
这就引出了我想要透视的数据(下面是该数据的子集):
我需要它看起来如下所示:
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
| DeviceUID | DeviceName | Node1 | Node2 | Node3 | Node 4 | Node5 |
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
| 226 | Boiler | BOILER | AMMONIA | CHILLER | | |
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
| 230 | SSilo | SSUG | WALKER | | | |
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
| 29 | Cooling | AMMONIA | BOILER | CAR_A | CAR_B | LINE1 |
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
我确信我可以导出到Excel,修改,使其看起来像那样。但我希望这是一个可重复的存储过程,我可以用于当前数据集
提前感谢。未经测试,但我们只是在您的初始查询中添加了一个轴心 这还假设您拥有已知或最大数量的节点。如果没有,则必须使用动态
Select *
From (
Select *
,Item = concat('Node',Row_Number() over (Partition By DeviceUID,DeviceName Order by (Select null))
From (
SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d
inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress
) A
) src
Pivot (max(NodeName) for Item in ([Node1],[Node2],[Node3],[Node4],[Node5]) ) pvt
我相信很快会有一些回复指出动态SQL之类的东西,但我感兴趣的是这在哪里有用。哪个应用程序能够以标准方式处理结果,从而能够处理具有不可预测列集的结果集?对我来说,它只对某种“报告”有意义,是的,SSRS报表能够获取您的源查询并生成这样的数据透视结果。我宁愿导出到Excel,也不愿在关系数据库管理系统的存储过程中使用动态查询汇编。您认为如何?节点数是否达到最大值?如果是,您可以轻松地透视数据。如果不是,请你仍然可以,你只需要使用
动态sql
.Perfect!我必须在Select null之后添加一个结尾)并添加几个节点字段-但正是我想要的,谢谢@安德鲁很乐意帮忙,也很高兴你纠正了我的错误。
Select *
From (
Select *
,Item = concat('Node',Row_Number() over (Partition By DeviceUID,DeviceName Order by (Select null))
From (
SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d
inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress
) A
) src
Pivot (max(NodeName) for Item in ([Node1],[Node2],[Node3],[Node4],[Node5]) ) pvt