仪表ID  故障类型ID 故障时间    仪表名称             故障名称         1      2     1278990839     101#采集器           短路故障
         1      2     1279081263     101#采集器           短路故障
         1      1     1279081350     101#采集器           接地故障
         1      2     1279081563     101#采集器           短路故障
         1      3     1279081763     101#采集器           断相故障
         2      3     1278990819     102#采集器           断相故障
         2      3     1279081337     102#采集器           短路故障
         2      3     1279081563     102#采集器           断相故障
         2      2     1279081579     102#采集器           接地故障
         3      1     1279081163     103#采集器           接地故障
         3      1     1279081263     103#采集器           接地故障
         3      2     1279081359     103#采集器           短路故障
     
上面的列表是查询出来的数据,现在我想得到每个仪表对应的故障次数,然后求和,详细结果如下面列表(下面列表中数据为手动填写,说明格式),请问这条T-sql 该如何写,望不吝赐教!
序号  仪表名称  接地故障次数  短路故障次数 断相故障次数 总计
1     101#采集器   3      4             1           8
2     102#采集器   4      4             2           10
3     103#采集器   2      4             5           11

解决方案 »

  1.   

    select DN.Data_Fault.intMeterID as 仪表ID,intFaultID as 故障类型ID,intDataTime as 故障时间,
    DN.Base_Meter_Base.strMeterName as 仪表名称,strFaultName as 故障名称
    from DN.Data_Fault inner join DN.Base_Meter_Base
    on DN.Data_Fault.intMeterID=DN.Base_Meter_Base.intMeterID inner join DN.Base_Fault_Info on DN.Data_Fault.intFaultID=DN.Base_Fault_Info.intFaultID;
    这是查询出下面这个结果集的t-sql仪表ID 故障类型ID 故障时间 仪表名称 故障名称  1 2 1278990839 101#采集器 短路故障
      1 2 1279081263 101#采集器 短路故障
      1 1 1279081350 101#采集器 接地故障
      1 2 1279081563 101#采集器 短路故障
      1 3 1279081763 101#采集器 断相故障
      2 3 1278990819 102#采集器 断相故障
      2 3 1279081337 102#采集器 短路故障
      2 3 1279081563 102#采集器 断相故障
      2 2 1279081579 102#采集器 接地故障
      3 1 1279081163 103#采集器 接地故障
      3 1 1279081263 103#采集器 接地故障
      3 2 1279081359 103#采集器 短路故障
      

  2.   

    能不能教我怎么写? 刚学的oracle 貌似这个Decode 只有oracle 有吧? 
      

  3.   

    select 仪表名称,sum(decode(故障名称,'接地故障',1,0)) 接地故障次数,
    sum(decode(故障名称,'短路故障',1,0)) 短路故障次数,
    sum(decode(故障名称,'断相故障',1,0)) 断相故障次数数,
    count(故障时间)
    from temp group by 仪表名称,故障时间
      

  4.   

    select DN.Data_Fault.intMeterID as 仪表ID,
    DN.Base_Meter_Base.strMeterName as 仪表名称,
    count(decode(intFaultID,1,1)) 接地故障次数,
    count(decode(intFaultID,2,1)) 短路故障次数,
    count(decode(intFaultID,3,1)) 断相故障次数,
    count(1) 总次数
    from DN.Data_Fault inner join DN.Base_Meter_Base
    on DN.Data_Fault.intMeterID=DN.Base_Meter_Base.intMeterID inner join DN.Base_Fault_Info on DN.Data_Fault.intFaultID=DN.Base_Fault_Info.intFaultID
    group by DN.Data_Fault.intMeterID,DN.Base_Meter_Base.strMeterName 
      

  5.   

    create table test2
    (id number(2),
     type_id  number(2),
     gz_date  number(10),
     yq_name  varchar2(10),
     gz_name  varchar2(10))select id,yq_name,sum(decode(gz_name,'接地故障',1,0)) 接地故障次数,
    sum(decode(gz_name,'短路故障',1,0)) 短路故障次数,
    sum(decode(gz_name,'断相故障',1,0)) 断相故障次数数
    from test2 group by id,yq_name
      

  6.   


    先谢谢各位兄弟热情的帮助!谢谢! 根据这位兄弟的语句 我修改了自己的,呵呵 和 
    wkc168
     
    (l_db) 
    差不多哦 但是现在他没有自动求和 ,有什么办法能将每个仪表发生了哪种故障 自动求和出来,比如说 1号仪表 ,发生1号故障 3次 2号故障 4次 这样的。 select strMeterName,sum(decode(strFaultName,'接地故障',1,0)) 接地故障次数,
    sum(decode(strFaultName,'短路故障',1,0)) 短路故障次数,
    sum(decode(strFaultName,'断相故障',1,0)) 断相故障次数数,
    count(intDataTime)
    from DN.Data_Fault inner join DN.Base_Meter_Base 
    on DN.Data_Fault.intMeterID=DN.Base_Meter_Base.intMeterID inner join DN.Base_Fault_Info on DN.Data_Fault.intFaultID=DN.Base_Fault_Info.intFaultID
     group by strMeterName,intDataTime;
      

  7.   


    SELECT 仪表ID,
           仪表名称,
           SUM(DECODE(故障类型ID, '1', 1, 0)) AS "接地故障次数",
           SUM(DECODE(故障类型ID, '2', 1, 0)) AS "短路故障次数",
           SUM(DECODE(故障类型ID, '3', 1, 0)) AS "断相故障次数",
           COUNT(*) "总计"
      FROM TABLE_NAME
     GROUP BY 仪表ID, 仪表名称