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