最後の基準句の 1 つを除いて同一のクエリが 4 つあります。可能であれば、これらの 4 つを 1 つに凝縮する方法を見つけようとしています。現在、私たちが作成したプログラムは、4 つのストアド プロシージャを介してこれら 4 つのステートメントを呼び出しますが、4 つすべてを返す 1 つの呼び出しを行うことができれば、それは素晴らしいことです。ステートメントの大部分は次のとおりです。
SELECT SUM(PausedTime) AS PausedMode
FROM UsageStats
WHERE StartDate >= CONVERT(VARCHAR(8), @StartDate, 112) AND StopDate < CONVERT(VARCHAR(8), @EndDate, 112)
AND LocationID = @LocationID
AND SystemID = @SystemID
AND PlayingArea = @PlayingArea
AND PausedTime > 0
私はこれらをさらに 3 つ持っており、変更されるのは SUM 計算のフィールドだけです (すべての SUM フィールドのタイプは ですint
)。
SUM(PlayModeTime) AS PlayModeTime
SUM(RecordModeTime) AS RecordModeTime
SUM(ReplayModeTime) AS ReplayModeTime
最後のAND
基準 AND PlayModeTime > 0 AND RecordModeTime > 0 AND ReplayModeTime > 0
select 句でステートメントを使用しようとしましたCASE
が、失敗しました:
SELECT
playMode = (CASE WHEN PlayModeTime > 0 THEN SUM(PlayModeTime) END),
pausedMode = (CASE WHEN PausedTime > 0 THEN SUM(PausedTime) END),
recordMode = (CASE WHEN RecordModeTime > 0 THEN SUM(RecordModeTime) END),
replayMode = (CASE WHEN ReplayModeTime > 0 THEN SUM(ReplayModeTime) END)
FROM UsageStats
WHERE StartDate >= CONVERT(VARCHAR(8), @StartDate, 112) AND StopDate < CONVERT(VARCHAR(8), @EndDate, 112)
AND LocationID = @LocationID
AND SystemID = @SystemID
AND PlayingArea = @PlayingArea
GROUP BY PlayModeTime, PausedTime, RecordModeTime, ReplayModeTime
私はこのようなものを手に入れたいです:
PlayModeTime | PausedMode | RecordModeTime | ReplayModeTime
---------------------------------------------------------------
200 340 10 55
どんな助けでも大歓迎です。