我一直在尝试,但没有想出任何可行的方法:(我有一个简单的问题:
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,修改,让它看起来像那样。但我希望这是一个可重复的存储过程,我可以将其用于当前数据集。
提前谢谢。
发布于 2018-08-17 08:05:09
未经测试,但我们只是向您的初始查询添加了一个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]) ) pvthttps://stackoverflow.com/questions/51885896
复制相似问题