在 Oracle 中透视表

问题描述 投票:0回答:1

我正在尝试破解 Oracle 查询以将日期列转换为年份。

**来源:: **

身份证 财年 CAL_DATE 假期描述
P001 23 财年 2023年1月1日 元旦
P001 24 财年 2024年1月1日 元旦

预期输出

身份证 假期描述 23 财年 24 财年
P001 元旦 2023年1月1日 2024年1月1日

尝试过 PIVOT,但没有太大帮助。请帮我创建一个动态 SQL。

谢谢。

sql oracle plsql pivot
1个回答
0
投票

我们可以使用条件聚合。 对于以下与您类似的示例数据,但扩展了一些其他行...

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 日
© www.soinside.com 2019 - 2024. All rights reserved.