1.
select bh,count(distinct NAME) g_hs,sum(SFBS) g_bs,sum(SFJE) g_je
from tab1
where CE='26'
2.
select bh,count(distinct NAME) d_hs,sum(SFBS) d_bs,sum(SFJE) d_je
from tab1
where CE<>'26'
上述2个不同条件语句能写成如下方式吗:
select bh,
       sum(CASE WHEN SERVFACE<>'  26' THEN SFBS ELSE 0 END) d_bs,
       sum(CASE WHEN SERVFACE<>'  26' THEN SFJE ELSE 0 END) d_js,
       ..
       ..
from tab1

解决方案 »

  1.   

    不好意思,漏了group by bh
      

  2.   

    --直接union all即可.select bh,count(distinct NAME) g_hs,sum(SFBS) g_bs,sum(SFJE) g_je 
    from tab1 
    where CE='26' 
    group by bh
    union all
    select bh,count(distinct NAME) d_hs,sum(SFBS) d_bs,sum(SFJE) d_je 
    from tab1 
    where CE <>'26' 
    group by bh--或者
    select bh,ce,count(distinct NAME) g_hs,sum(SFBS) g_bs,sum(SFJE) g_je from
    (
      select bh,NAME,SFBS,SFJE,(case when CE='26' then 'ce=26' else 'ce<>26' end) ce from tab1
    ) t
    group by bh , ce 
     
      

  3.   

    select bh,ce,count(distinct NAME) g_hs,sum(SFBS) g_bs,sum(SFJE) g_je from
    (
      select bh,NAME,SFBS,SFJE,(case when CE='26' then 'ce=26' else 'ce<>26' end) ce from tab1
    ) t
    group by bh , ce 
    那d_hs,d_bs,d_je在那里?
      

  4.   

    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  5.   

    d_hs,d_js合在ce里面了.
    'ce=26' --> d_hs
    'ce<>26' --> d_jsg_je , d_je 也合在sum(SFJE),分别对应如上.