У меня есть 4 запроса, которые идентичны, за исключением одного из предложений критериев в конце. Я пытаюсь найти способ сконденсировать эти 4 в 1, если это возможно. В настоящее время программа, которую мы написали, вызывает эти 4 заявления через 4 хранимые процедуры, но если я могу сделать этот 1 вызов, который возвращает все 4, это было бы здорово. Вот основная часть заявления:Присоединение нескольких запросов с различными критериями поиска
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
критерии и PlayModeTime> 0 и RecordModeTime> 0 и ReplayModeTime> 0
Я попытался с помощью CASE
сек tatement в выбранном пункте, но это не удалось:
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
Любая помощь приветствуется.