我一直在玩,只是没有提出任何可行的方法:(我有一个简单的查询:
SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d
inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress
这将我带到我要透视的数据(下面是该数据的子集):
|---------------------|------------------|------------------|
| DeviceUID | DeviceName | NodeName |
|---------------------|------------------|------------------|
| 226 | Boiler | BOILER |
|---------------------|------------------|------------------|
| 226 | Boiler | AMMONIA |
|---------------------|------------------|------------------|
| 226 | Boiler | CHILLER |
|---------------------|------------------|------------------|
| 230 | SSilo | SSUG |
|---------------------|------------------|------------------|
| 230 | SSilo | WALKER |
|---------------------|------------------|------------------|
| 29 | Cooling | AMMONIA |
|---------------------|------------------|------------------|
| 29 | Cooling | BOILER |
|---------------------|------------------|------------------|
| 29 | Cooling | CAR_A |
|---------------------|------------------|------------------|
| 29 | Cooling | CAR_B |
|---------------------|------------------|------------------|
| 29 | Cooling | LINE1 |
|---------------------|------------------|------------------|
我需要它看起来像以下内容:
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
| 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,进行修改,使其看起来像这样。但是我希望这是一个可重复的存储过程,可以用于当前数据集。
谢谢。
答案 0 :(得分:0)
未经测试,但我们只是将PIVOT添加到您的初始查询中。
这还假定您具有已知或最大数量的节点。如果没有,则必须进行动态处理。
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