クエリのWHERE句で計算フィールド値を使用しようとしていますが、調査の結果、派生テーブルを作成する必要があることがわかりました。ただし、計算フィールドは次のようなCASEステートメントを使用しているため、構文はわかりません。
CASE T.IsReassigned
WHEN 1 THEN DATEDIFF(MINUTE,
(SELECT top 1 SXAVWFTaskHistory.CreatedWhenUTC from SXAVWFTaskHistory where TaskID = T.TaskID and StatusID = 7 order by TaskHistoryID desc),
SYSDATETIMEOFFSET())
ELSE
CASE Stat.StatusID
WHEN 1 THEN DATEDIFF(MINUTE,TSK.CreatedWhenUTC, SYSDATETIMEOFFSET()) -- time duration between when task is created(use SXAVWFTask.CreatedWhenUTC) and now
WHEN 2 THEN DATEDIFF(MINUTE,TSK.CreatedWhenUTC, SYSDATETIMEOFFSET()) -- time duration between when task is created(use SXAVWFTask.CreatedWhenUTC) and now
ELSE DATEDIFF(MINUTE,TSK.CreatedWhenUTC, TH.CreatedWhenUTC)
END
END as TaskItemAge,
次に、where句でTaskItemAge値を次のように使用します。
WHERE TaskItemAge > @TaskAgeStart AND TaskItemAge < @TaskAgeEnd
そのCASEステートメントを副選択に入れるにはどうすればよいですか?
** * ** * ** * ** * **編集** * ** * ** * ** * 申し訳ありませんが、これがどのように機能するかについてはまだ少し混乱しています。これが私のクエリのより大きなスニペットです:
SELECT TSK.TaskID, --0
TH.IsLatest,
TH.CreatedWhenUTC as TaskHistoryCreationDate, --10
TS.Name AS STATE,
CASE T.IsReassigned
WHEN 1 THEN DATEDIFF(MINUTE,
(SELECT top 1 SXAVWFTaskHistory.CreatedWhenUTC from SXAVWFTaskHistory where TaskID = T.TaskID and StatusID = 7 order by TaskHistoryID desc),
SYSDATETIMEOFFSET())
ELSE
CASE Stat.StatusID
WHEN 1 THEN DATEDIFF(MINUTE,TSK.CreatedWhenUTC, SYSDATETIMEOFFSET()) -- time duration between when task is created(use SXAVWFTask.CreatedWhenUTC) and now
WHEN 2 THEN DATEDIFF(MINUTE,TSK.CreatedWhenUTC, SYSDATETIMEOFFSET()) -- time duration between when task is created(use SXAVWFTask.CreatedWhenUTC) and now
ELSE DATEDIFF(MINUTE,TSK.CreatedWhenUTC, TH.CreatedWhenUTC)
END
END as TaskItemAge,
ctx.ContextTypeName,
ctx.ContextDescription, --15
TH.TouchedWhenUTC as TaskHistoryModifiedDate
INTO #ii
FROM SXAVWFTask TSK
INNER JOIN SXAVWFTaskHistory TH ON TSK.TaskID = TH.TaskID
INNER JOIN @PagedTemp T on TH.TaskHistoryID = T.TaskHistoryID
Where TaskItemAge > @TaskAgeStart AND TaskItemAge < @TaskAgeEnd