CASE SQL возвращает ноль - PullRequest
       5

CASE SQL возвращает ноль

2 голосов
/ 07 февраля 2012

Когда я выполняю нижеприведенное в TSQL, я получаю NULL, даже если есть значение.

Вот мой код:

CASE
    WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
        THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE 
    ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
END as weighted

Почему это происходит?

Ответы [ 2 ]

6 голосов
/ 07 февраля 2012

Знаете ли вы свои таблицы истинности SQL?

( NULL = ' ' )  --> UNKNOWN
( NULL > ' ' )  --> UNKNOWN
( ( NULL = ' ' ) OR ( NULL > ' ' ) )  --->  ( UNKNOWN OR UNKNOWN )  --> UNKNOWN
( ( 'x' = ' '  ) OR ( NULL > ' ' ) )  --->  (   FALSE OR UNKNOWN )  --> UNKNOWN
( ( ' ' = ' '  ) OR ( NULL > ' ' ) )  --->  (    TRUE OR UNKNOWN )  --> TRUE

Последний случай часто может застать людей врасплох.

Кроме того, вы знаете свои правила заполнения SQL ...?

4 голосов
/ 07 февраля 2012

Скорее всего, это потому, что хотя бы одно из ваших значений равно NULL.

В T-SQL основное правило:

NULL + anything = NULL

Чтобы проверить, почему этовернув NULL, попробуйте следующий фрагмент SQL.Он покажет вам все ваши значения, собранные вместе, чтобы вы могли понять, почему возвращается NULL.

SELECT *
FROM (
    SELECT WEPHWORK.WEPHWORK,
        OCESAWD.OCESAWD,
        OCESAWE.OCESAWE,
        CASE
            WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
                1
            ELSE 2
        END as type
        CASE
            WHEN cal.Weekday = ' ' OR HOLIDAY.DateInfo > ' '
                THEN WEPHWORK.WEPHWORK + OCESAWD.OCESAWD + OCESAWE.OCESAWE
            ELSE OCESAWD.OCESAWD + OCESAWE.OCESAWE
        END as weighted
    FROM your_tables.... ) x
WHERE x.weighted IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...