我正在尝试破解 Oracle 查询以将日期列转换为年份。
**来源:: **
身份证 | 财年 | CAL_DATE | 假期描述 |
---|---|---|---|
P001 | 23 财年 | 2023年1月1日 | 元旦 |
P001 | 24 财年 | 2024年1月1日 | 元旦 |
预期输出
身份证 | 假期描述 | 23 财年 | 24 财年 |
---|---|---|---|
P001 | 元旦 | 2023年1月1日 | 2024年1月1日 |
尝试过 PIVOT,但没有太大帮助。请帮我创建一个动态 SQL。
谢谢。
我们可以使用条件聚合。 对于以下与您类似的示例数据,但扩展了一些其他行...
create table yourtable as
select 'P001' as id,'FY23' as fy, date '2023-01-01' as cal_date, 'New Years Day' as holiday
union all
select 'P001','FY24',date '2024-01-01','New Years Day'
union all
select 'P002','FY22',date '2024-01-01','New Years Day'
union all
select 'P002','FY22',date '2023-01-01','New Years Day'
union all
select 'P002','AB22',date '2023-12-25','First Christmas Day'
union all
select 'P002','AB22',date '2024-12-25','First Christmas Day';
...以下查询...
SELECT
id,
holiday,
MIN(cal_date) AS FY23,
MAX(cal_date) AS FY24
FROM yourtable
GROUP BY id, holiday
ORDER BY id, holiday;
...将产生以下结果:
身份证 | 假期 | 23 财年 | 24 财年 |
---|---|---|---|
P001 | 元旦 | 23 年 1 月 1 日 | 24 年 1 月 1 日 |
P002 | 第一个圣诞节 | 23 年 12 月 25 日 | 24 年 12 月 25 日 |
P002 | 元旦 | 23 年 1 月 1 日 | 24 年 1 月 1 日 |