一个人显示一行记录,一次性待遇和定期待遇在同一行。
发来一个查询语句如下,很长。别吓坏了,用的东西不多,实质就是 分组,聚合
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。