fn_CountWeekDaysと呼ばれるユーザー定義のスカラー関数があり、startdateとenddateの2つのパラメーターを受け取り、整数値を返します。この関数は、基本的に、開始日と終了日の間の平日を計算しません。case文でスカラー関数を使用する
ファンクションコード:
CREATE FUNCTION [dbo].[fn_CountWeekDays]
(
@fromdate Datetime,
@todate Datetime
)
RETURNS INT AS
Begin
Declare @NoOfWeekDays int
Set @NoOfWeekDays = (DATEDIFF(dd, @fromdate, @todate) + 1)
-(DATEDIFF(wk, @fromdate, @todate) * 2)
-(CASE WHEN DATENAME(dw, @fromdate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @todate) = 'Saturday' THEN 1 ELSE 0 END)
Return @NoOfWeekDays
End
case文で関数を呼び出すと同時に、別の整数値と比較する方法?以下は
は私のクエリです:
select
Case
when Priority in ('1 - Critical','2 - High') and fn_CountWeekDays(Opened,Closed) <= 3 and ProblemState = 'Closed/Resolved' then 1 else 0
End as RCA_KPI_P1_P2_Met,
Case
when Priority = '3 - Moderate' and fn_CountWeekDays(Opened,Closed) <= 5 and ProblemState = 'Closed/Resolved' then 1 else 0
End as RCA_KPI_P3_Met
from v_Problem
これは動作しませんか? – nimdil
私はこれもうまくいくと思います。パフォーマンスの観点からは、関数をテーブル値関数に書き換えるほうがよいでしょう – HoneyBadger
この場合、テーブル値関数をどのように使用できますか?私は機能コードを含めるように投稿を更新しました。 –