我有 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
条件 AND PlayModeTime > 0 AND RecordModeTime > 0 AND ReplayModeTime > 0
我尝试CASE
在 select 子句中使用该语句,但失败了:
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
任何帮助表示赞赏。