我有以下数据集,我正在尝试创建 SQL 来生成 FEE 列。
客户 | 年份 | 月 | 收入 | 费用 | 注释 |
---|---|---|---|---|---|
客户A | 24 财年 | 1 | 0 | 0 | |
客户A | 24 财年 | 2 | 0 | 0 | |
客户A | 24 财年 | 3 | 0 | 0 | |
客户A | 24 财年 | 4 | 0 | 0 | |
客户A | 24 财年 | 5 | 0 | 0 | |
客户A | 24 财年 | 6 | 0 | 0 | |
客户A | 24 财年 | 7 | 5000 | 5000 | 费用 = 收入 - 总和(客户和年份的费用列的所有前行) |
客户A | 24 财年 | 8 | 0 | 0 | |
客户A | 24 财年 | 9 | 7000 | 2000 | 费用 = 收入 - 总和(客户和年份的费用列的所有前行) |
客户A | 24 财年 | 10 | 150000 | 143000 | 费用 = 收入 - 总和(客户和年份的费用列的所有前行) |
客户A | 24 财年 | 11 | 0 | 0 | |
客户A | 24 财年 | 12 | 0 | 0 |
我尝试了窗口分析函数的组合,但是我似乎无法得到上面详细介绍的最终结果。任何人都可以帮助我使用什么 SQL 语句来计算 FEES 列吗?
谢谢你
使用
case
表达式 和 sum()
窗口函数:
select t.*,
case when revenue > 0
then revenue * 2 - sum(revenue) over (partition by CUSTOMER order by YEAR, MONTH)
else 0
end
from tablename t