2014-11-15 1 views
-1

У меня есть SQL-запрос, где я пытаюсь вернуть «0», если в результате получается Null.ISNull, NULLIF, COALESCE, не работает

До сих пор я пытался:

SELECT  NULLIF (Amountt, '0') AS count 
FROM   1Table 
WHERE  (Operations_Day BETWEEN @startdate AND @enddate) AND (location = @Storenumber) AND (Hour = '18') 

SELECT  ISNULL(Amountt, 0) AS count 
FROM   1Table 
WHERE  (Operations_Day BETWEEN @startdate AND @enddate) AND (location = @Storenumber) AND (Hour = '18') 

SELECT CASE WHEN (Amountt IS NULL) THEN 0 ELSE Amountt END AS count 
FROM   1Table 
WHERE  (Operations_Day BETWEEN @startdate AND @enddate) AND (location = @Storenumber) AND (Hour = '18') 

Все результаты возвращают пустую строку, которая не обрабатывается хорошо в VB.net Как я могу вернуться «0»

ответ

0

Это означает, что Amountt не является NULL. Попробуйте с помощью case вместо:

select (case when Amountt is null or Amountt = 'NULL' or Amountt = '' then 0 else Amountt end) 

Если ситуация такова, что ваш код не возвращается нет строк, то вы можете использовать агрегацию:

SELECT COALESCE(SUM(Amountt), '0') AS count 
FROM 1Table 
WHERE (Operations_Day BETWEEN @startdate AND @enddate) AND 
    (location = @Storenumber) AND (Hour = '18'); 
+0

это нуль. Когда я меняю его на базовый оператор select, он возвращает «NULL» – Shmewnix

+0

Я просто пометил это SQL Server 2000 – Shmewnix

+0

Агрегация работала. Хотя, я не уверен, почему. Он возвращает значение «NULL», когда запрос представляет собой простой оператор select ... любая идея, почему? – Shmewnix