2016-08-25 22 views
0

24時間以内にAVとファイアウォールのイベント数を表示するウイルス対策イベントを表示しようとしています。基本的に私は異なる条件で同じ列を合計しようとしています。私は、SUM関数でCASE WHENステートメントを使用してみましたが、結果を返しません。ファイアウォールイベントの数が続くAVイベントの数が続くホスト名を表示することが期待2つの合計結果を組み合わせる?

SELECT 
     events.arc_sourceHostName, 
     SUM(CASE WHEN events.arc_deviceEventClassId="fw" THEN events.arc_baseEventCount ELSE 0 END) AS "FWCount", 
     SUM(CASE WHEN events.arc_deviceEventClassId="av" THEN events.arc_baseEventCount ELSE 0 END) AS "AVCount" 

FROM events 

WHERE 
     events.arc_deviceVendor = "BitDefender" 
     AND 
     (events.arc_deviceEventClassId="fw" 
     OR 
     events.arc_deviceEventClassId="av") 


GROUP BY 
     events.arc_sourceHostName 

ORDER BY FWCount DESC 

さらなる詳細

Hostname AVCount FWCount 
Host1  5   4 
Host2  3   5 
+0

カウントクエリを実行して、実際にそれらの 'where'条件で取得するレコードがあるかどうかを確認しようとしましたか? – hchaznedaroglu

+0

申し訳ありませんが、間違って貼り付け、それは主に私が試した修正版です。はい、私はsumステートメントのないwhereステートメントのイベントを受け取ります。 – Jack

+2

これは実行されますか?なぜ "arc_deviceEventClassId"の名前は "deviceEventClassId"ですか? – jlasierra

答えて

0

このクエリは、あなたが望むことをしますか?

SELECT e.arc_sourceHostName, 
     SUM(CASE WHEN e.arc_deviceEventClassId = 'fw' THEN e.arc_baseEventCount ELSE 0 END) AS FWCount, 
     SUM(CASE WHEN e.arc_deviceEventClassId = 'av' THEN e.arc_baseEventCount ELSE 0 END) AS AVCount 
FROM events e 
WHERE e.arc_deviceVendor = 'BitDefender' AND 
     e.deviceEventClassId IN ('fw', 'av') 
GROUP BY e.arc_sourceHostName 
ORDER BY FWCount DESC; 

これが機能しない場合、行はWHERE条件を満たすことはありません。

+0

Gordon:クエリを実行するとエラーが発生します。 "元のSQLを返す、大文字と小文字の区別のないクエリを取得することができません" – Jack

+0

大丈夫なので、私は明らかに多くの間違いを犯したので、多くのすべてを書き直した後、私はこのクエリを動作させることができました。 – Jack

関連する問題