回答:select to_char(t.CREDATE,'mm') as CREDATE, t.ENTRYID, case when nvl(t1.TOTAL,0)=0 then 0 else nvl(sum(t.TOTAL),0)/nvl(t1.TOTAL,0) end as "同比TOTAL",--同比 case when nvl(t1.SETTLEQTY,0)=0 then 0 else nvl(sum(t.SETTLEQTY),0)/nvl(t1.SETTLEQTY,0) end as "同比SETTLEQTY",--同比 nvl(t1.TOTAL,0) as "同期TOTAL",--同期 nvl(t1.SETTLEQTY,0) as "同期SETTLEQTY",--同期 nvl(t2.TOTAL ,0)as "去年TOTAL",--去年 nvl(t2.SETTLEQTY,0) as "去年SETTLEQTY",--去年 to_char(t.CREDATE,'yyyy-mm') as YEARN, to_char(t.CREDATE,'yyyy') as YEAR, nvl(sum(t.TOTAL),0) as TOTAL,--当月 nvl(sum(t.SETTLEQTY),0) as SETTLEQTY--当月from BMS_SA_DTLQRY_V tleft join (select ENTRYID, to_char(CREDATE,'yyyymm') as year_mon, sum(TOTAL) as TOTAL, sum(SETTLEQTY) as SETTLEQTYfrom BMS_SA_DTLQRY_Vgroup by to_char(CREDATE,'yyyymm'),ENTRYID)t1 on to_char(add_months(t.CREDATE,-12),'yyyymm')=t1.year_mon and t.ENTRYID=t1.ENTRYIDleft join ( select ENTRYID, to_char(CREDATE,'yyyy') as yearn, sum(TOTAL) as TOTAL, sum(SETTLEQTY) as SETTLEQTYfrom BMS_SA_DTLQRY_Vgroup by to_char(CREDATE,'yyyy'),ENTRYID)t2 on to_char(add_months(t.CREDATE,-12),'yyyy')=t2.yearn and t.ENTRYID=t2.ENTRYIDgroup by to_char(CREDATE,'mm'), to_char(t.CREDATE,'yyyy-mm'), to_char(CREDATE,'yyyy'), t1.TOTAL, t.ENTRYID, t1.SETTLEQTY, t2.TOTAL, t2.SETTLEQTY
回答:大致SQL如下select sum(case when substr(日期字段,1,6)<to_char(sysdate,'yyyymm') then 统计字段 else 0 end) as 字段1,--1-5月总和 sum(case when substr(日期字段,1,6)=to_char(sysdate,'yyyymm') then 统计字段 else 0 end) as 字段2,--6月总和 sum(case when substr(日期字段,1,6)>to_char(sysdate,'yyyymm') then 统计字段 else 0 end) as 字段3,--7-12月总和 sum(统计字段) as 字段4--1-12月总和from 表名where substr(日期字段,1,4)=to_char(sysdate,'yyyy')