2012-05-24 2 views
1

Я запускаю несколько экземпляров одного и того же запроса. Ниже версия не должна быть возвращают какие-либо данные, но я получаю 1 строку с «нулем» в каждом из столбцов:Запрос возвращает 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 

Как я могу изменить этот запрос, чтобы убедиться, что я только возвращаю данные, когда существует допустимые значения ?

Может ли это быть связано с использованием Case и Sum в рамках основного оператора SQL, вызывающего возврат данных 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%' 
HAVING System IS NOT NULL # Added 
ORDER BY LAST_UPDATE DESC LIMIT 1 

Попробуйте добавить ИГРУШЕЕ.

+0

Это именно то, что мне нужно. Я пытался, WHERE ScanName, как% SYSTEM-HQ%, не является NULL. Спасибо. – Ben

0

Скорее всего, таблица missingpatches содержит 1 строку, удовлетворяющие

WHERE ScanName like '%SYSTEM-HQ%' 

т.е. строку с ScanName, который содержит «SYSTEM-HQ», но не в точности равна «SYSTEM-HQ», который вы приравнять с в выберите 1-й столбец.

В SQL столбцы оцениваются после объединения таблиц и определения предложений. Следовательно, строка, которую вы видите, на самом деле соответствует критериям where where.

Смежные вопросы