【发布时间】:2020-12-30 21:30:00
【问题描述】:
提前感谢您的帮助!
我有一个日期字段 (A.event_dt),我用它来创建新列,如下所示(一直到 12 月)。
to_char(A.event_dt, 'YYYYMM') as Event_Month,
case when ROW_NUMBER() OVER (PARTITION BY B.emp_nbr, E.cntry_enti_nbr, Event_Month order by A.event_dt asc) = 1 then 1 else 0 end as Unique_Event,
count(distinct concat(B.emp_nbr, E.cntry_enti_nbr, A.event_dt)),
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '06' then 1 else '' end as Jun,
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '07' then 1 else '' end as Jul,
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '08' then 1 else '' end as Aug,
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '09' then 1 else '' end as Sep,
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '10' then 1 else '' end as Oct,
我也想加上YY。
样本数据、当前输出和所需数据输出:
....EVENT_DT.....CURRENT OUTPUT......DESIRED DATA OUTPUT
....1/31/2020..........Jan................Jan20
....2/35/2019..........Feb................Feb19
....3/15/2020..........Mar................Mar20
所需的输出格式:
....EVENT_DT.....Feb19......Jan20..........Mar20
....2/25/2019........1..........................
....1/31/2020..................1................
....3/15/2020..............................1
编辑: 我尝试了下面的代码,但是出现错误: (预计在 'concat' 关键字和 '('.) 之间会出现类似 ',' 的内容:
case when CAST(A.event_dt as DATE FORMAT 'MM')(char(2)) = '06' then 1 else '' end as concat('Jun',CAST(A.event_dt as DATE FORMAT 'YY')(char(2)))
编辑: 我也尝试过这段代码,但是出现错误: "'AS' 关键字和 '(' 之间的名称或 unicode 分隔标识符之类的东西。
case when extract(month from A.ramp_dt) = '12' then 1 else '' end as (to_char(A.ramp_dt, 'MonYYYY')),
case when extract(month from A.ramp_dt) = '01' then 1 else '' end as (to_char(A.ramp_dt, 'MonYYYY')),
case when extract(month from A.ramp_dt) = '02' then 1 else '' end as (to_char(A.ramp_dt, 'MonYYYY'))
【问题讨论】:
-
请提供样本数据和期望的结果。
-
@Gordon Linoff - 你好……我已经根据要求的信息修改了我的原始帖子。
-
extract(month from event_dt)返回一个数字月份。您不能动态创建列别名。 -
@dnoeth .... 您好 - 我修改了查询以使用“提取”方法。我仍在尝试创建列别名。最新尝试指示错误:extract(month from A.ramp_dt) = '12' then 1 else '' end as (to_char(A.ramp_dt, 'MonYYYY')) 的情况,extract(month from A.ramp_dt) = '01' then 1 else '' end as (to_char(A.ramp_dt, 'MonYYYY')), case when extract(month from A.ramp_dt) = '02' then 1 else '' end as (to_char(A.ramp_dt , 'MonYYYY'))
-
同样,您不能动态创建列别名。你为什么要它?您已经知道该列中需要哪个月份,如果 2019 年 2 月和 2020 年 2 月有两行怎么办?