数据
/*ID 城市 单号 司机 客户反馈日期 超期 类型
ID City NOID  driver Kfdate cq type
1 潮州 120202000397 B司机 2012/2/7 0:00 9999 人工确认
2 潮州 120203000560 A司机 2012/2/6 0:00 9999 人工确认
3 潮州 120205000504 B司机 2012/2/10 0:00 9999 人工确认
4 潮州 120206000440 C司机 2012/2/10 0:00 9999 人工确认
5 潮州 120207001896 B司机 2012/2/9 0:00 9999 人工确认
6 东莞 120205000522 C司机 null -1 null
7 东莞 120206002879 A司机 null -2 null
8 东莞 120207003802 B司机 null -2 null*/
 查询得出以下结果
/*ID 司机 总单数 已反馈单数 未反馈单数 超期单数
1 A司机 2 1 1 1
2 B司机 4 3 1 1
3 C司机 2 1 1 1
*/
先谢过

解决方案 »

  1.   

    解释一下,
    总单数,就是count(NOID)无条件
    已反馈单数,就是count(NOID) 条件 Kfdate is not null
    未反馈单数,就是count(NOID) 条件Kfdate is null
    超期单数,就是count(NOID)条件,cq<0
      

  2.   

    select ID, 
           司机,
           (select count(*) from table where Kfdate is not null and ID = t.ID),
           (select count(*) from table where Kfdate is null and ID = t.ID),
           (select count(*) from table where cq<0 and ID = t.ID)
    from table t
    group by ID, 
             司机,
      

  3.   


    declare @t table(司机 varchar(10),反馈日期 datetime,超期 int);
    insert into @t select 'B司机','2012/2/7 0:00',9999 union all
    select 'A司机','2012/2/6 0:00',9999 union all
    select 'B司机','2012/2/10 0:00',9999 union all
    select 'C司机','2012/2/10 0:00',9999 union all
    select 'B司机','2012/2/9 0:00',9999 union all
    select 'C司机',NULL,-1 union all
    select 'A司机',NULL,-2 union all
    select 'B司机',NULL,-2 select 司机,COUNT(1) as 总单数
    ,COUNT(反馈日期) as 已反馈单数
    ,sum(case when 反馈日期 IS null then 1 else 0 end)  as 未反馈
    ,SUM(case when 超期<0 then 1 else 0 end) as 超期  from @t 
    group by 司机/*
    司机         总单数         已反馈单数       未反馈         超期
    ---------- ----------- ----------- ----------- -----------
    A司机        2           1           1           1
    B司机        4           3           1           1
    C司机        2           1           1           1
    */