sum(case when D.RQ BETWEEN '2022-01-01' and '2022-01-31' then d.ryou end) LZY1,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-02-28' then d.ryou end) LZY2,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-03-31' then d.ryou end) LZY3,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-04-30' then d.ryou end) LZY4,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-05-31' then d.ryou end) LZY5,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-06-30' then d.ryou end) LZY6,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-07-31' then d.ryou end) LZY7,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-08-31' then d.ryou end) LZY8,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-09-30' then d.ryou end) LZY9,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-10-31' then d.ryou end) LZY10,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-11-30' then d.ryou end) LZY11,
sum(case when D.RQ BETWEEN '2022-01-01' and '2022-12-31' then d.ryou end) LZY12
想用判断每月最后一天D.DYM的值是否为空来判断,应该是判断有一点问题
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 1 then D.DYM end)) is null then null else '2022-01-31' end)then d.ryou end) LZY1,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 2 then D.DYM end)) is null then null else '2022-02-28' end)then d.ryou end) LZY2,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 3 then D.DYM end)) is null then null else '2022-03-31' end)then d.ryou end) LZY3,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 4 then D.DYM end)) is null then null else '2022-04-30' end)then d.ryou end) LZY4,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 5 then D.DYM end)) is null then null else '2022-05-31' end) then d.ryou end) LZY5,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 6 then D.DYM end)) is null then null else '2022-06-30' end) then d.ryou end) LZY6,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 7 then D.DYM end)) is null then null else '2022-07-31' end) then d.ryou end) LZY7,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 8 then D.DYM end)) is null then null else '2022-08-31' end) then d.ryou end) LZY8,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 9 then D.DYM end)) is null then null else '2022-09-30' end) then d.ryou end) LZY9,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 10 then D.DYM end)) is null then null else '2022-10-31' end) then d.ryou end) LZY10,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 11 then D.DYM end)) is null then null else '2022-11-30' end) then d.ryou end) LZY11,
sum(case when D.RQ BETWEEN '2022-01-01' and (case when((case when year(D.RQ) =2022 and month(D.RQ) = 12 then D.DYM end)) is null then null else '2022-12-31' end) then d.ryou end) LZY12
case when要在分组求和之前做,像这样
select month,sum(RQ) from (
select month,(case when D.RQ BETWEEN '2022-01-01' and '2022-01-31' then d.ryou end) as RQ from test
) tmp group by month
说说看用的是什么数据库,不同数据库的写法不一样。
这个思路其实可以这样,先简单做每个月的月汇总,竖着的,然后使用开窗函数的移动窗口,从第一行到当前行累加,最后再做个行列转换就行了,
这样代码量比你目前的代码量少得多,而且可以达到你想要的效果