0

我有一个名为 JOBS 的数据库表,其中包含 ID、STATUS 和 COMPLETION_TIME 作为列。STATUS 0,1 成功,STATUS 2,3 失败,STATUS 4,5 被杀死。它只能有一种状态。我想找出过去 10 小时内成功、失败和终止的工作数量。我必须只使用 SELECT 进行查询,不能使用任何变量进行查询。我使用以下查询进行操作。

SELECT
(SELECT COUNT(*) 
WHERE STATUS IN (0,1))AS SuccessCount, 

(SELECT COUNT(*)
WHERE STATUS IN (2,3))AS FailedCount , 

(SELECT COUNT(*)
WHERE STATUS IN (4,5))AS KilledCount,

FROM JOBS 

WHERE COMPLETION_TIME >= (SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) - (10 * 60 * 60))
AND COMPLETION_TIME <= (SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()));

但是这个查询不起作用。它给了我成功、失败或被杀的工作,而不是他们的数量。

4

1 回答 1

0

尝试这个:

select sum(case when status in (0, 1) then 1 else 0 end) as succeeded,
       sum(case when status in (2, 3) then 1 else 0 end) as failed,
       sum(case when status in (4, 5) then 1 else 0 end) as killed
from jobs
WHERE COMPLETION_TIME >= (SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) - (10 * 60 * 60)) and
      COMPLETION_TIME <= (SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()));

您的原始查询在语法上不正确。我看不到它是如何返回任何数据的,因为子查询:

(SELECT COUNT(*) WHERE STATUS IN (0,1))   

没有“FROM”子句来定义变量状态。

于 2012-07-27T18:49:11.690 回答