微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle 分组排序聚合之group by

一个显示一行记录,一次性待遇和定期待遇在同一行。

发来一个查询语句如下,很长。别吓坏了,用的东西不多,实质就是 分组,聚合

SELECT C.*,(C.AAE019OLD + C.AAE019CE) AAE019NEW
  FROM (SELECT T.AAZ257,T.AAC001,T.AAB001,T.AAC147,T.AAC003,T.AAC004,T.AAC012,T.AAA027,T.AAC006,T.AAC007,T.AAC055,T.AIC162,T.AIC161,T.AAC020,T.BIC215,T.AAE200,T.AAE210,T.AAC081,T.AAC085,T.AAC064,T.AAC014,T.AAC015,(SELECT SUM(A.AAE019)
                  FROM AC61 A,AA17 B
                 WHERE A.AAA036 = B.AAA036
                   AND A.AAZ257 = T.AAZ257
                   AND B.BAZ057 = 100000
                   AND A.AAE041 <=
                       (CASE WHEN T.AAE210 > 201701 THEN T.AAE210 ELSE 201701 END)
                   AND A.AAE042 >=
                       (CASE WHEN T.AAE210 > 201701 THEN T.AAE210 ELSE 201701 END)) AAE019OLD,decode(t.dqflag,'1',SUM(T.AAE188)) AAE019CE,'0',SUM(T.AAE188)) aae019ycxce
          FROM T_YLZCTZ T
         WHERE T.BIC226 = 1000000000000463
         GROUP BY T.AAZ257,t.dqflag) C

关键点:

decode(t.dqflag,SUM(T.AAE188)) AAE019CE,

group by 语句除了 group by后面跟的项目,其它出现在查询中的项都必须是聚合函数

去掉 group by 后的 t.dqflag ,

查询变为 sum((case when t.dqflag='1' then 0 else t.aae188 end)) AAE019CE,

当定期时 只对非1 的进行sum

当非定期时 只对非0的进行sum。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐