首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server查询-如何透视这组数据

SQL Server查询-如何透视这组数据
EN

Stack Overflow用户
提问于 2018-08-17 06:02:28
回答 1查看 37关注 0票数 2

我一直在尝试,但没有想出任何可行的方法:(我有一个简单的问题:

代码语言:javascript
复制
SELECT DISTINCT IP.DeviceUID, IP.DeviceName, d.NodeName from Devices d
    inner join IPSCHEMA IP on IP.PLCIP=d.CommunicationAddress

这会将我带到我要透视的数据(下面是该数据的子集):

代码语言:javascript
复制
|---------------------|------------------|------------------|
|      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       |
|---------------------|------------------|------------------|

我需要它看起来像下面这样:

代码语言:javascript
复制
|---------------------|------------------|------------------|------------------|------------------|------------------|------------------|
|      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,修改,让它看起来像那样。但我希望这是一个可重复的存储过程,我可以将其用于当前数据集。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 08:05:09

未经测试,但我们只是向您的初始查询添加了一个PIVOT。

这还假设您具有已知或最大数量的节点。如果不是这样,你将不得不使用动态的。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51885896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档