1

同じクエリの複数のインスタンスを実行しています。以下のバージョンはデータを返すべきではありませんが、各列に「null」を含む1行を取得しています:

SELECT (CASE ScanName WHEN 'SYSTEM-HQ' THEN 'HQ
System' END) AS System, 
sum(CASE pspplMSSeverity WHEN 1 THEN 10 WHEN 2 THEN 9 WHEN 
3 THEN 6 WHEN 4 THEN 3 END) AS Score, 
(sum(CASE pspplMSSeverity WHEN 1 THEN 10 WHEN 2 THEN 9 
WHEN 3 THEN 6 WHEN 4 THEN 3 END)/COUNT(pspplMSSeverity)) AS 
Grade 
FROM missingpatches 
WHERE ScanName like '%SYSTEM-HQ%' 
ORDER BY LAST_UPDATE DESC LIMIT 1 

このクエリを変更して、有効な値が存在する場合にのみデータを返すようにするにはどうすればよいですか?

これは、Null データが返される原因となっているプラ​​イマリ SQL ステートメント内での Case と Sum の使用によるものでしょうか?

4

2 に答える 2

1
SELECT (CASE ScanName WHEN 'SYSTEM-HQ' THEN 'HQ
System' END) AS System, 
sum(CASE pspplMSSeverity WHEN 1 THEN 10 WHEN 2 THEN 9 WHEN 
3 THEN 6 WHEN 4 THEN 3 END) AS Score, 
(sum(CASE pspplMSSeverity WHEN 1 THEN 10 WHEN 2 THEN 9 
WHEN 3 THEN 6 WHEN 4 THEN 3 END)/COUNT(pspplMSSeverity)) AS 
Grade 
FROM missingpatches 
WHERE ScanName like '%SYSTEM-HQ%' 
HAVING System IS NOT NULL # Added
ORDER BY LAST_UPDATE DESC LIMIT 1 

HAVING を追加してみてください。

于 2012-05-24T15:09:01.690 に答える
0

ほとんどの場合、テーブルmissingpatchesには条件を満たす行が 1 つ含まれています。

WHERE ScanName like '%SYSTEM-HQ%' 

つまり、「SYSTEM-HQ」を含むが、select の 1 番目の列で同一視している「SYSTEM-HQ」と正確に等しくない ScanName の行。

SQL では、テーブルが結合された後に列が評価され、where 句が評価されます。したがって、表示されている行は、実際に where 句の基準を満たしています。

于 2012-05-24T15:13:45.663 に答える