我正在尝试运行以下代码:
SELECT a.job_name
, coalesce(b.target_time, cast('08:00:00' as time(2))) sla_time
FROM ud812.slarpt_job_level_info a
left outer join (
select job_name, target_time
from ud812.slarpt_job_target_times
qualify row_number() over (partition by job_name
order by established_date desc) = 1
) b
on (a.job_name = b.job_name)
where a.display_on_sla_report = 'Y'
and a.job_type = 'LD'
and a.decom_date is null
这样做时,我收到错误“选择失败 3800:THEN/ELSE 表达式中的数据类型不匹配。这与我对合并的使用有关。
当我检查我的数据类型时:从 ud812.slarpt_job_target_times 中选择 type(target_time) 合格...我得到 time(2)。我已经尝试了几件事来调整我的代码。
其中包括: 使用不同的数据类型 ex。时间(6)。我什至尝试了以下方法,但 sla_time 的类型返回为整数。
SELECT a.job_name
, cast(coalesce(b.target_time, '08:00:00') as time(2)) sla_time
FROM ud812.slarpt_job_level_info a
left outer join (
select job_name, cast(target_time as char(8)) as target_time
from ud812.slarpt_job_target_times
qualify row_number() over (partition by job_name
order by established_date desc) = 1
) b
on (a.job_name = b.job_name)
where a.display_on_sla_report = 'Y'
and a.job_type = 'LD'
and a.decom_date is null
最后,我试图为每个工作名称设定一个默认时间为早上 8 点。想法?
我也尝试了以下方法,但是当我键入()该列时,它返回一个整数,而不是时间(2)。
SELECT a.job_name
, cast(coalesce(b.target_time, default_time) as time(2)) sla_time
FROM (
select job_name, '08:00:00' as default_time
from ud812.slarpt_job_level_info
where a.display_on_sla_report = 'Y'
and a.job_type = 'LD'
and a.decom_date is null
) a
left outer join (
select job_name, target_time
from ud812.slarpt_job_target_times
qualify row_number() over (partition by job_name
order by established_date desc) = 1
) b
on (a.job_name = b.job_name)