1

次のコードを実行しようとしています。

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)
4

1 に答える 1

0

以下のテスト ケースではCOALESCE()、フォーマットTIME '00:00:01'を NULL の置換値として使用すると機能します。

CREATE VOLATILE TABLE MyTable, NO FALLBACK
( MyID SMALLINT NOT NULL,
  MyTime TIME(2)
)
PRIMARY INDEX (MyID) 
ON COMMIT PRESERVE ROWS;

INSERT INTO MyTable VALUES (1, TIME '01:23:45');
INSERT INTO MyTable VALUES (2, NULL);

SELECT *
FROM MyTable;

SELECT MyID
     , COALESCE(MyTime, TIME '23:45:01')
 FROM MyTable;
于 2013-01-09T17:35:49.813 に答える