我有一张像这样的桌子
SR 号 | 姓名 | 金额1 | 数量2 | 年份 |
---|---|---|---|---|
1 | 作物1 | 1000 | 3000 | 2023 |
2 | 作物2 | 2000 | 1000 | 2023 |
3 | 作物3 | 5000 | 2500 | 2022 |
4 | 作物4 | 1500 | 3500 | 2022 |
5 | 作物5 | 3500 | 4500 | 2021 |
6 | 作物6 | 9500 | 4000 | 2021 |
现在,我想要像这样的结果
年份 | 年数 | 上一年总和 |
---|---|---|
2023 | 3000 | 6000 |
2022 | 6000 | 8500 |
2021 | 8500 | 0 |
说明 - 2023 年 -> 年度总和 = 2023 年金额 1 的总和 2023 年 -> 上一年总和 = 2022 年金额 2 的总和 2022 年 -> 年总和 = 2022 年金额 2 的总计(2023 年行的上一年总计) 2022 年 -> 上一年总和 = 2021 年金额 2 的总和 2021 年 -> 年总和 = 2021 年金额 2 的总和(2022 年行的上一年总和)。 2021 年 -> 上一年总和 = 2020 年金额 2 的总和。
我尝试使用 case when 条件但没有得到正确的结果,
如何得到这样的结果。
您可以使用 cte 和窗口函数:
with sums as (select year, sum(amount1) sum1, sum(amount2) sum2
from test group by year)
SELECT year,
case when (ROW_NUMBER() OVER (ORDER BY year desc) = 1) then sum1 else sum2 end as year_sum,
COALESCE (LEAD(sum2,1) OVER (ORDER BY year DESC) , 0) as previous_year_sum
FROM
sums order by year desc;