ORACLE 9I PL/SQL环境下,表T中,字段A,字段B,字段C,若条件甲成立,对字段B求和,即sum(B),若条件乙成立,对字段C求和,即sum(C),现在要求sum(B)+sum(C)的值,并且group by A,只能用普通的sql语句,不能设变量,不能用“or”条件,,要求一次执行出来,执行完的显示结果应该是:字段A,sum(B)+sum(C)
   具体的sql语句该如何写呢?

解决方案 »

  1.   

    需求我不是很明白
    select a,case when(条件甲成立) then sum(b) when(条件乙成立) then sum(c) else sum(b)+sum(c) end from t
    group by a条件甲成立  sum(b)
    条件乙成立  sum(c)
    否则   sum(b)+sum(c)不知道有错不?
      

  2.   

    select A,sum(B)+sum(C) from (select A,sum(case when B条件成立 then B else 0 end) as sum(B),sum(case when C条件成立 then C else 0 end) as sum(C) from T group by A order by A)
    这样行不?
      

  3.   

    HelloWorld_001理解错了,不是“否则   sum(b)+sum(c)”,而是一定要sum(b)+sum(c),最后要知道的结果是sum(b)+sum(c),而不是sum(b)或sum(c)至于leon_natali的语句我完全看不懂,抱歉,见谅
      

  4.   

    create table test2(cid varchar2(100),cb int,cc int);insert into test2 values('1',1,1);
    insert into test2 values('1',2,2);
    insert into test2 values('2',1,1);
    insert into test2 values('2',2,2);select cid,sum(case when cid='1' then cb else 0 end)+sum(case when cid='2' then cc else 0 end) sumbc
    from test2
    group by cid//输出结果
    cid     sumbc
    1 3
    2 3
      

  5.   

    hongqi162(失踪的月亮) 兄:你的动作太大了,与其这么做我不会定义变量做吗?只能是对现有的表T的操作,肯定不能涉及到创建表,视图,定义变量之类的操作,最好是纯“select”语句,多谢!
      

  6.   

    楼主傻B啊?人家那是测试表呢!你要的是这一部份嘛select cid,sum(case when cid='1' then cb else 0 end)+sum(case when cid='2' then cc else 0 end) sumbc
    from test2
    group by cid
      

  7.   

    select a,sum(decode(条件参数,条件甲,b,条件乙,c,c+b))
    from T
    group by a
      

  8.   

    hongqi162(失踪的月亮)
    写的不错sum(case when cid='1' then cb else 0 end)
      

  9.   

    decode啊 ,同 楼上的楼上
      

  10.   

    hongqi162(失踪的月亮) 正确:
    这样也可以.
    select 字段A,sum(decode(字段A,'1',字段B,0))+sum(decode(字段A,'2',字段C,0))  sumbc
    from 表T
    group by 字段A
      

  11.   

    楼上的,问问题要开贴问
    再怎么样,你也不能挖坟问啊!case when 字段>'2005-1-1' then xxx else 0 end