以前一个帖子的新问题!!!--老问题:
oracle9i数据库,通过pl/sql操作,现有一表WW,有K,a,b,c,d五个字段,3000到4000左右条记录,欲求甲,乙2个结果,要对所有记录执行如下操作: 
如果K=1, 
    一:若(a-b)-c>=0,甲=b,乙=c; 
    二:若(a-b)-c <0,甲=b,乙=a-b; 
如果K=0, 
    一:若(a-b)-d>=0,甲=b+d,乙=0; 
    二:若(a-b)-d <0,甲=a,乙=0; 最后,对甲和乙的结果分别累加,输出甲和乙的结果, 如果现在还想求sum(a)的值呢??sum(a)只要直接求就可以了不要加这些判断条件, 
也就是说,输出的结果是sum(甲),sum(乙),sum(a),恳求具体的SQL语句,不胜感激!!当时回帖:select sum(甲) , sum(乙) 乙,sum(a) 
  from (select case 
                when k = 1 then 
                  b 
                when (k = 0 and a - b - d > 0) then 
                  b + d 
                when (k = 0 and a - b - d < 0) then 
                  a 
              end 甲 , 
              case 
                when k = 0 then 
                  0 
                when (k = 1 and a - b - c > 0) then 
                  c 
                when (k = 1 and a - b - c < 0) then 
                  a - b 
              end 乙,a          
        from ww) 这样解决基本没问题.--新问题:问题逐步升级了,又添了张表YY,字段m,n,原WW表再添个字段m,YY.m和WW.m是关联的, 
保留原来的查询结果不变,还要增加YY.m=WW.m时表YY中n字段的查询结果,也就是说,最终的查询 
结果输出的应该是:YY.n,sum(甲),sum(乙),sum(a),求具体的SQL语句!!!始终没有回音ing 

解决方案 »

  1.   

    ww.m和yy.m是一对一,还是一对多关系,还有是否会有ww.m在yy里没有的情况
      

  2.   

    你这题目也起的太夸张了,太小看在CSDN混的人了,也太高看你的问题了,另外这个问题自己多学习下,完全可以自己解决的
    这种难度的题目只以是刚入门
      

  3.   

    WW.m在YY中一定存在,YY.m记录和值都唯一,
    我只是想知道答案,这和小不小看csdn的人有关系吗??
      

  4.   

    还是那个帖子阿,那个回复还是我给的。你再稍微修改下子就是了。问题是sum(甲),sum(乙),sum(a)只有一行,
    那你满足条件的YY.n是不是也就一个值。还是多个值?
      

  5.   

    是的,多谢你老兄帮忙
    是一个值,YY.m和YY.n在YY表里都是唯一值
    感谢你再提示一下呢
      

  6.   

    select sum(甲) , sum(乙) 乙,sum(a),yy.n
      from (select case
                    when k = 1 then
                      b
                    when (k = 0 and a - b - d > 0) then
                      b + d
                    when (k = 0 and a - b - d < 0) then
                      a
                  end 甲 ,
                  case
                    when k = 0 then
                      0
                    when (k = 1 and a - b - c > 0) then
                      c
                    when (k = 1 and a - b - c < 0) then
                      a - b
                  end 乙,a         
            from ww,yy where YY.m=WW.m)
      

  7.   

    select n,sum(甲) over() 甲, sum(乙) over() 乙,sum(a) over()
      from (select yy.n,case 
                    when k = 1 then 
                      b 
                    when (k = 0 and a - b - d > 0) then 
                      b + d 
                    when (k = 0 and a - b - d < 0) then 
                      a 
                  end 甲 , 
                  case 
                    when k = 0 then 
                      0 
                    when (k = 1 and a - b - c > 0) then 
                      c 
                    when (k = 1 and a - b - c < 0) then 
                      a - b 
                  end 乙,a          
            from ww,yy
            where www.m=yy.m) 
      

  8.   

    这样写肯定报没有group by 
      

  9.   

    首先感谢两位费心费力的辛勤劳动
    linzhangs的语句执行不了,始终提示"YY"."n":invalid identifier,我看了一下:
    select sum(甲),sum(乙)乙,sum(a),yy.n from (...),后面括号中根本没有任何对应前面select语句中yy.n的查询信息,
    看语句应该就是查不出yy.n的,linzhangs兄可以再看一下. hebo2005兄的语句能执行,但有点小问题,就是缺个group by,还有over()好象根本没作用啊.
    我把我最终的语句贴出来:
    select n,sum(甲), sum(乙),sum(a)
      from (select yy.n,case 
                    when k = 1 then 
                      b 
                    when (k = 0 and a - b - d > 0) then 
                      b + d 
                    when (k = 0 and a - b - d < 0) then 
                      a 
                  end 甲 , 
                  case 
                    when k = 0 then 
                      0 
                    when (k = 1 and a - b - c > 0) then 
                      c 
                    when (k = 1 and a - b - c < 0) then 
                      a - b 
                  end 乙,
                  a          
            from ww,yy 
            where www.m=yy.m) 
      group by n这样显示出来的就完全是我想要的结果了,无比感谢两位!!