数据表类似如下:地区     状态      人数
--------------------------
江苏     未通过    2112
广东     未通过    3324
广东     通过      23
北京     未通过    2561
北京     通过      152
四川     未通过    672
湖南     未通过    1231要把它查询为如下形式的结果:地区     总数     通过      未通过
-------------------------------------
江苏     2112     0         2112
广东     5624     23        3324
北京     4081     152       2561
四川     672      0         672
湖南     1231     0         1231请问SQL应该怎么写呀??

解决方案 »

  1.   

    select 地区, sum(人数), sum(case when 状态 = '通过' then 人数 else 0 end), sum(case when 状态 = '未通过' then 人数 else 0 end) from table group by 地区大致如此
      

  2.   

    select 地区,
           sum(人数) 总数,
           sum(case when 状态 = '通过' then 人数 else 0 end) 通过,
           sum(case when 状态 = '未通过' then 人数 else 0 end) 未通过
    from tb group by 地区
      

  3.   

    select 地区,
           sum(人数) 总数,
           sum(case when 状态 = '通过' then 人数 else 0 end) 通过,
           sum(case when 状态 = '未通过' then 人数 else 0 end) 未通过
    from tb group by 地区
    select 地区,
           sum(人数) 总数,
           sum(decode(状态,'通过',人数,0)) 通过,
           sum(decode(状态,'未通过',人数,0)) 未通过
    from tb group by 地区
      

  4.   


    create table test1(id number(5),地区 varchar2(20),状态 varchar2(10),人数 number(10));
    insert into test1 values(1,'江苏','未通过',2112);
    insert into test1 values(2,'广东','未通过',3324);
    insert into test1 values(3,'广东','通过',23);
    insert into test1 values(4,'北京','未通过',2561);
    insert into test1 values(5,'北京','通过',152);
    insert into test1 values(6,'四川','未通过',672);
    insert into test1 values(7,'湖南','未通过',1231);select a.地区,
           sum(a.人数) 总数,
           sum(decode(a.状态,'通过',a.人数,0)) 通过,
           sum(decode(a.状态,'未通过',a.人数,0)) 未通过
    from test1 a
    group by a.地区       地区     总数   通过    未通过
    ----------------------------------------
    1 北京 2713 152 2561
    2 广东 3347 23 3324
    3 湖南 1231 0 1231
    4 江苏 2112 0 2112
    5 四川 672 0 672