运输单号 作业编号 运输公司 作业状态
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后面的单数是重复的
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后面的单数是重复的
总票数=count(*),
已回票数=sum(case 作业状态 when '完成' then 1 else 0 end),
未回票数=sum(case 作业状态 when '计划' then 1 else 0 end)
from 表甸
group by 运输公司
最好分成2个子表。然后再联合查询!
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
*/