次のコードを実行しようとしています。
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
そうすると、「Select Failed 3800: THEN/ELSE 式のデータ型が一致しません。これは、coalesce の使用に関連しています。
データ型を確認すると、ud812.slarpt_job_target_times qualify から type(target_time) を選択してください... time(2) を取得します。コードを調整するためにいくつかのことを試しました。
これらには以下が含まれます: 異なるデータ型の使用。時間(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 時の既定の時間を設定しようとしています。アイデアはありますか?
次のことも試しましたが、列を type() すると、time(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)