0

ID、STATUS、および COMPLETION_TIME を列として持つ JOBS というデータベース テーブルがあります。STATUS 0,1 は成功、STATUS 2,3 は失敗、STATUS 4,5 は強制終了です。ステータスは 1 つだけです。過去 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 に答える