(ORACLE)遇到一个奇怪的sql查询需求,不知道怎么写,请教各位大神。

表sa有27列,全是数字:l,m,n 3列,单列的值一样,a1-a12,b1-b12  24列。下面虽然是个错误的sql语句,但应该能表示想得到的效果。请问如果想达到这样的效果有什么实现方式吗?

select 

case 

    when l+m+n<0

     then -(l+m+n)

    else to_number('0',9)

     end  as 一月,

case 

    when l+m+n+a1+b1+一月<0

     then -(l+m+n+a1+b1+一月)

    else to_number('0',9)

     end  as 二月,

case 

    when l+m+n+a1+b1+一月+a2+b2+二月<0

     then -(l+m+n+a1+b1+一月+a2+b2+二月)

    else to_number('0',9)

     end  as 三月,

case 

    when l+m+n+a1+b1+一月+a2+b2+二月+a3+b3+三月<0

     then -(l+m+n+a1+b1+一月+a2+b2+二月+a3+b3+三月)

    else to_number('0',9)

     end  as 四月

from sa 

fireFade 发布于 2019-5-14 16:30 (编辑于 2019-5-14 16:40)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
helofLv5见习互助
发布于2019-5-15 12:05

没看到你的需求,不过SQL语句的话把一月、二月这些全部替换成相对于的case when then else end就可以了,中间嵌套case when

  • fireFade fireFade(提问者) 这种方式写下去会崩溃的,我写到3月就写不下去了,太复杂了。所以想问问有没有简单点的实现方式
    2019-05-17 17:09 
最佳回答
0
firegunzxLv6高级互助
发布于2019-5-16 13:37

用循环或者select嵌套,不能像你这样写,一月、二月之类的在这一层还没有定义,必须先查出一月,然后再查二月,以此类推


  • fireFade fireFade(提问者) 就是如果select嵌套的话太复杂了没法写,因为要写12个月的
    2019-05-17 17:04 
  • firegunzx firegunzx 回复 fireFade(提问者) 没办法,你的数据结构只能这样 或者用java写,那样效率能高,但是实现更复杂
    2019-05-17 17:28 
  • fireFade fireFade(提问者) 回复 firegunzx 唉,看来没啥好办法了,谢谢
    2019-05-17 17:30 
最佳回答
0
黄源Lv6中级互助
发布于2019-5-16 14:15

你想要实现什么效果?


  • fireFade fireFade(提问者) 就是想简单地实现累加,先select出来“一月”,又要用这个“一月”去计算“二月”,依次类推到十二月,但是由于每一个月的计算公式比较复杂,这样累加下去根本没法写sql
    2019-05-17 17:08 
  • 黄源 黄源 回复 fireFade(提问者) 写函数吧
    2019-05-18 11:11 
  • 4关注人数
  • 476浏览人数
  • 最后回答于:2019-5-16 14:15
    请选择关闭问题的原因
    确定 取消
    返回顶部