1

最後の基準句の 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

どんな助けでも大歓迎です。

4

2 に答える 2

2

SUM値が のときにゼロを追加するため、なぜこれらの条件が必要なのかまったくわかりません0SUMすべての列だけを表示することはできませんか?:

SELECT
    playMode = SUM(PlayModeTime),
    pausedMode = SUM(PausedTime),
    recordMode = SUM(RecordModeTime),
    replayMode = SUM(ReplayModeTime)
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
于 2013-08-12T19:57:11.263 に答える