Oracle 分组排序聚合之group by

前端之家收集整理的这篇文章主要介绍了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。

猜你在找的Oracle相关文章