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, decode(t.dqflag, '0', SUM(T.AAE188)) aae019ycxce FROM T_YLZCTZ T WHERE T.BIC226 = 1000000000000463 GROUP BY 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, t.dqflag) C
关键点:
decode(t.dqflag, '1', 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。