一、select mp_teemcode,
       sum(case when pc_class = 'a类' then 1 else 0 end) A,
       sum(case when pc_class = 'b类' then 1 else 0 end) B,
count(1) 完成
 from jbb group by mp_teemcode
查出    mp_teemcode        A         B         完成
          王               15        5         20
          张               20        10        30
二、select inspect_name,
sum(case when uplj = 'Y' then 1 else 0 end) 包保,
 count(1) 检查次数
from jcxs group by inspect_name
查出     inspect_name               Y               检查次数
           王                       3                 4
           张                       5                 5
我想查出inspect_name        A           B         Y         检查次数    完成
           王               15          5         3           4          20
           张               20          10        5           5          30

解决方案 »

  1.   

    select isnull(m.mp_teemcode,n.inspect_name) inspect_name , 
           m.A,  --如果为空需要显示为0的话,isnull(m.A,0) A ,其他类似
           m.B,
           n.Y,
           n.检查次数,
           m.完成 
    from
    (
    select mp_teemcode, 
          sum(case when pc_class = 'a类' then 1 else 0 end) A, 
          sum(case when pc_class = 'b类' then 1 else 0 end) B, 
    count(1) 完成 
    from jbb group by mp_teemcode 
    ) m
    full join
    (
    select inspect_name, 
    sum(case when uplj = 'Y' then 1 else 0 end) 包保, 
    count(1) 检查次数 
    from jcxs group by inspect_name 
    )
    on m.mp_teemcode,n.inspect_name
      

  2.   

    select isnull(m.mp_teemcode,n.inspect_name) inspect_name , 
           m.A,  --如果为空需要显示为0的话,isnull(m.A,0) A ,其他类似
           m.B,
           n.Y,
           n.检查次数,
           m.完成 
    from
    (
    select mp_teemcode, 
          sum(case when pc_class = 'a类' then 1 else 0 end) A, 
          sum(case when pc_class = 'b类' then 1 else 0 end) B, 
    count(1) 完成 
    from jbb group by mp_teemcode 
    ) m
    full join
    (
    select inspect_name, 
    sum(case when uplj = 'Y' then 1 else 0 end) 包保, 
    count(1) 检查次数 
    from jcxs group by inspect_name 
    ) n 
    on m.mp_teemcode = n.inspect_name
      

  3.   

    老师OK了。可是怎么jbb表里其他的都列出来了呀,是不是全连接了呀,full join怎么改呀
    我要查jcxs表为主
      

  4.   

    你对照上面的写法,还可以使用left join,然后选择你需要的字段,我不清楚你具体的子段.
    大致写法如下:
    select m.* , n.某些字段 from m full join n on m.关键字 = n.关键字
    select m.* , n.某些字段 from m left join n on m.关键字 = n.关键字其中 m, n 也可以使用子查询.
      

  5.   

    恩谢谢老师已经搞定,老师如果我想查'a类' 周六周日总共多少个怎么查呢?比如sum(case when datepart(intime,getdate()) in (6,7) then 1 else 0 end)as 周末信息
      

  6.   


    select isnull(m.mp_teemcode,n.inspect_name) inspect_name , 
           isnull(m.A,0),  --如果为空需要显示为0的话,isnull(m.A,0) A ,其他类似
           isnull(m.B,0),
           n.Y,
           n.检查次数,
           m.完成 
    from
    (
    select mp_teemcode, 
          sum(case when pc_class = 'a类' then 1 else 0 end) A, 
          sum(case when pc_class = 'b类' then 1 else 0 end) B, 
    count(1) 完成 
    from jbb group by mp_teemcode 
    ) m
    full join
    (
    select inspect_name, 
    sum(case when uplj = 'Y' then 1 else 0 end) 包保, 
    count(1) 检查次数 
    from jcxs group by inspect_name 
    ) n 
    on m.mp_teemcode = n.inspect_name