运输单号 作业编号 运输公司  作业状态
T001      W001      万力      计划
T001      W002      万力      计划
T002      W003      中天      完成
T003      W004      天华      计划
T003      W005      天华      完成
这个是表结构一个单对应多个编号,我按照运输公司分组查询出总的单数(不重复记录),计划中的记录,完成了的记录,我的SQL语句是这样的
运输单号 作业编号 运输公司  作业状态
select  count(distinct(trafficId)),sum(case workState when '调度计划' then 1 else 0 end),
         sum(case workState when '' then 1 else 0 end),trafficCompany
from T_Traffic_Company_AttemperPlan  group by trafficCompany
总单数是对的,但是SUM后面的单数是重复的

解决方案 »

  1.   

    还是用sum(case when then ) 交叉数据表实现,具体不知道你的字段和表结构
      

  2.   

    select 运输公司,
           总票数=count(*),
           已回票数=sum(case 作业状态 when '完成' then 1 else 0 end),
           未回票数=sum(case 作业状态 when '计划' then 1 else 0 end)
    from 表甸 
    group by 运输公司
      

  3.   

    group by 后面的条件错了!
    最好分成2个子表。然后再联合查询!
      

  4.   

    itblog(i like i do) 貌似正解
      

  5.   

    --建表
    create table 计划(运输单号 varchar(10),作业编号 varchar(10),运输公司 varchar(10),作业状态 varchar(10))
    insert 计划 select 'T001','W001','万力','计划'
    insert 计划 select 'T001','W002','万力','计划'
    insert 计划 select 'T002','W003','中天','完成'
    insert 计划 select 'T003','W004','天华','计划'
    insert 计划 select 'T003','W005','天华','完成'
    --执行语句
    select 运输公司,
           总票数=count(*),
           已回票数=sum(case 作业状态 when '完成' then 1 else 0 end),
           未回票数=sum(case 作业状态 when '计划' then 1 else 0 end)
    from 计划 
    group by 运输公司/*
    天华 2 1 1
    万力 2 0 2
    中天 1 1 0
    */