我有一个奇怪的 snowflake 表格格式,在仅显示过去 36 个月的数据时会导致问题。
换句话说,我想查看过去 36 个月的数据,因此在查看当前日期时,2021 年 5 月之前的所有数据都应显示为 0。
财政年度从 10 月开始,因此表格月份发生变化。
这些年比 2021 年还远,但我只想要最后 36 个月。
该平台是雪花脚本,但如果您有 sql 脚本,我也可以翻译为雪花。
如有任何建议,我们将不胜感激。
原始表我开始于:
账户 | 年份 | 十月 | 十一月 | 十二月 | 一月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八月 | 九月 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A1 | 2021 | 1 | 2 | 3 | 4 | 5 | 6 | 44 | 55 | 66 | 77 | 88 | 99 |
A2 | 2022 | 1 | 2 | 3 | 4 | 5 | 6 | 44 | 55 | 66 | 77 | 88 | 99 |
A3 | 2023 | 1 | 2 | 3 | 4 | 5 | 6 | 44 | 55 | 66 | 77 | 88 | 99 |
A4 | 2024 | 1 | 2 | 3 | 4 | 5 | 6 |
我很难得到的结果表:
账户 | 年份 | 十月 | 十一月 | 十二月 | 一月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八月 | 九月 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A1 | 2021 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 55 | 66 | 77 | 88 | 99 |
A2 | 2022 | 1 | 2 | 3 | 4 | 5 | 6 | 44 | 55 | 66 | 77 | 88 | 99 |
A3 | 2023 | 1 | 2 | 3 | 4 | 5 | 6 | 44 | 55 | 66 | 77 | 88 | 99 |
A4 | 2024 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
这可以通过 UNPIVOT 然后两个过滤器和 rePIVOT 来完成,
OR 已知列并固定为 12:
with cte_pretending_to_be_a_table(Account,Year,Oct,Nov,Dec,Jan,Feb,Mar,Apr,May,Jun, Jul, Aug, Sep) as (
select * from values
('A-1', 2019, 1, 2, 3, 4, 5, 6, 44, 55, 66, 77, 88, 99),
('A0', 2020, 1, 2, 3, 4, 5, 6, 44, 55, 66, 77, 88, 99),
('A1', 2021, 1, 2, 3, 4, 5, 6, 44, 55, 66, 77, 88, 99),
('A2', 2022, 1, 2, 3, 4, 5, 6, 44, 55, 66, 77, 88, 99),
('A3', 2023, 1, 2, 3, 4, 5, 6, 44, 55, 66, 77, 88, 99),
('A4', 2024, 1, 2, 3, 4, 5, 6, null, null, null, null, null, null)
)
select
d.account,
d.year,
date_trunc('month', dateadd('year',-3, current_date())) as m3y,
iff(date_from_parts(d.year-1, 10, 1) >= m3y, oct, 0) as oct,
iff(date_from_parts(d.year-1, 11, 1) >= m3y, nov, 0) as nov,
iff(date_from_parts(d.year-1, 12, 1) >= m3y, dec, 0) as dec,
iff(date_from_parts(d.year, 1, 1) >= m3y, jan, 0) as jan,
/* ... */
iff(date_from_parts(d.year, 5, 1) >= m3y, may, 0) as may,
iff(date_from_parts(d.year, 6, 1) >= m3y, jun, 0) as jun,
/* ... */
from cte_pretending_to_be_a_table as d
where year(current_date())-3 <= d.year
order by d.year
;
账户 | 年份 | M3Y | 十月 | 十一月 | 十二月 | 一月 | 五月 | 六月 |
---|---|---|---|---|---|---|---|---|
A1 | 2021 | 2021-05-01 | 0 | 0 | 0 | 0 | 55 | 66 |
A2 | 2022 | 2021-05-01 | 1 | 2 | 3 | 4 | 55 | 66 |
A3 | 2023 | 2021-05-01 | 1 | 2 | 3 | 4 | 55 | 66 |
A4 | 2024 | 2021-05-01 | 1 | 2 | 3 | 4 |