在查询T_Device表时,有许多的关系及错误需要排查,这个表具有自关联的特点。即[Id]设备编号与其他设备的[ParentId]上级设备编号对应。

可以利用自连接进行查询,但是不好控制。最好,利用内连接。

       具体的代码,如下:

select b.[Id],b.[DeviceName],b.[ParentId],
       a.[Id],a.[DeviceName],a.[ParentId],
       c.[Id],c.[DeviceName],c.[ParentId]
from
    (select [Id],[DeviceName],[ParentId]
    from [PowerStation].[dbo].[T_Device] with(nolock)
    where [DelFlag]=0 and 
          [PStationId] = 42 and
          [DeviceTypeId] = 1) a,
    (select [Id],[DeviceName],[ParentId]
    from [PowerStation].[dbo].[T_Device] with(nolock)
    where [DelFlag]=0 and 
          [PStationId] = 42 and
          [DeviceTypeId] = 2) b,
    (select [Id],[DeviceName],[ParentId]
    from [PowerStation].[dbo].[T_Device] with(nolock)
    where [DelFlag]=0 and 
          [PStationId] = 42 and
          [DeviceTypeId] = 6) c
where a.[Id] = b.[ParentId] and
      c.[Id] = a.[ParentId]

       上述的查询方式,可以将一些规范的设备信息查询出来,对于一些不规范的信息,就查询不出来了。有以下一些类型:

  1. 直流汇流箱的上级设备,是直流柜,但是直流柜的数据没有采集,所以,维护的逻辑关系,不再是实际的上下级关系,而是系统实际会用到的上下级关系,即汇流箱的上级设备为集中式逆变器;
  2. 集中式逆变器的上级设备,物理上是箱变,但是实际用到的是集电线,即箱变的数据没有采集,实际需要维护的逆变器上级设备是集电线;

       有许多的设备上级设备的维护出现错误,所以,再上一步的查询中出现不了。需要采用其他的查询技巧。比如全外链接: