create table #DCsystem --直流系统
(
ID int identity(1,1),
Name varchar(50) --直流系统名
)insert into #DCstation values('直流系统1');
insert into #DCstation values('直流系统2');create table #alarm --告警
(
AlarmType varchar(50),--告警类型
DCsystemID int,--直流系统外键
DeviceType varchar(50),--设备类型
Handling decimal(1, 0) --是否处理告警

)insert into #alarm values('高越限告警',1,'直流系统',0);
insert into #alarm values('低越限预警',1,'直流系统',1);
insert into #alarm values('低越限告警',1,'直流系统',1);
insert into #alarm values('通讯中断告警',1,'直流系统',0);
insert into #alarm values('低越限告警',2,'直流系统',1);
insert into #alarm values('通讯中断告警',2,'直流系统',0);
insert into #alarm values('低越限告警',1,'蓄电池组',0);
insert into #alarm values('高越限预警',1,'蓄电池组',1);
insert into #alarm values('高越限预警',1,'蓄电池组',1);先解释下
直流系统里面有多个蓄电池组(蓄电池组也有一个表,暂时没有用到,先忽略),每个直流系统和电池组都有告警及预警,现在我想查“直流系统的告警和预警信息”,求mssql查询结果如下:设备名称 预警 告警 已处理
直流系统1  3    4    2
直流系统2  0    2    1再解释下
预警就是“低越限预警” “高越限预警”的出现次数
告警就是“高越限告警”“低越限告警” “通讯中断告警”的出现次数
已处理就是已处理次数,数据表里的1为已处理,0为未处理注意:因为蓄电池组是在直流系统里的一部分,所以也算在“直流系统1”的统计里

解决方案 »

  1.   

    create table #DCsystem --直流系统
    (
        ID int identity(1,1),
        Name varchar(50) --直流系统名
    )insert into #DCsystem values('直流系统1');
    insert into #DCsystem values('直流系统2');create table #alarm --告警
    (
        AlarmType varchar(50),--告警类型
        DCsystemID int,--直流系统外键
        DeviceType varchar(50),--设备类型
        Handling decimal(1, 0) --是否处理告警
        
    )insert into #alarm values('高越限告警',1,'直流系统',0);
    insert into #alarm values('低越限预警',1,'直流系统',1);
    insert into #alarm values('低越限告警',1,'直流系统',1);
    insert into #alarm values('通讯中断告警',1,'直流系统',0);
    insert into #alarm values('低越限告警',2,'直流系统',1);
    insert into #alarm values('通讯中断告警',2,'直流系统',0);
    insert into #alarm values('低越限告警',1,'蓄电池组',0);
    insert into #alarm values('高越限预警',1,'蓄电池组',1);
    insert into #alarm values('高越限预警',1,'蓄电池组',1);
    goselect m.name 设备名称,
           sum(case right(n.alarmtype,2) when '预警' then 1 else 0 end) [预警],
           sum(case right(n.alarmtype,2) when '告警' then 1 else 0 end) [告警],
           sum(case when n.Handling = 1 and n.DeviceType <> '蓄电池组' then 1 else 0 end) [已处理]
    from #DCsystem m , #alarm n
    where m.id = n.DCsystemID
    group by m.namedrop table #DCsystem , #alarm/*
    设备名称                                               预警          告警          已处理         
    -------------------------------------------------- ----------- ----------- ----------- 
    直流系统1                                              3           4           2
    直流系统2                                              0           2           1(所影响的行数为 2 行)
    */
      

  2.   

    感谢dawugui你好厉害全部分给你