2016-08-02 3 views
0

У меня есть таблица, как один выше с двумя левыми столбцами (оба из них являются целыми числами), и я добавил к этой таблице еще два поля:IS NULL не работает

Table1:

Asset_Value Contract_Value 
------------------------------- 
0    NULL    
NULL   200    
0    NULL  

И запрос:

Select 
    Asset_Value, Contract_Value, 
    Case 
     when Asset_Value is null 
      then 1 
      else 0 
    end As Ind_ForNullA, 
    Case 
     when Contract_Value is null 
      then 1 
      else 0 
    end As IndForNullC 
from 
    table1 

Однако я получаю странные результаты:

Asset_Value Contract_Value Ind_ForNullA IndForNullC 
---------------------------------------------------- 
0    NULL    1   1 
NULL   200    0   0 
0    NULL    0   1 

Обновление: никогда не обращайте внимания. Дамм запятая была забыта.

+1

Я не вижу таблицу ... – kbball

+8

, пожалуйста, напишите полный запрос, который дает вам результат. –

+4

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

ответ

0

Почему вы пытаетесь определить что-то как NULL - что уместно - но в этом случае или в том, что он меняет его на один или на нуль (попытка, которую я предполагаю), что неуместно?

Что вы будете делать дальше: решите, что в третьем отчете вы хотите иметь РЕАЛЬНОЕ логическое значение, которое отображает TRUE или FALSE?

Идите с NULL последовательно, на всем протяжении приложения, везде или нет. Однако НЕ СМЕШАНЬ И СЧИТАЙТЕ ПАРАДИГМЫ и ожидайте согласованных результатов. Кроме того, старайтесь не полагаться на CASE: есть очень, очень законная причина, зависящая от этого - особенно для чего-то такого же упрощенного, как то, что вы делаете.

FYI, единственная причина, по которой я могу представить себе, почему вы хотите, чтобы это поле «индикатор» было таким, чтобы вы могли проверить, является ли INDICATOR_A = 1. Однако, поскольку вы можете проверить ASSET IS NULL, зачем вообще беспокоиться? НИКОГДА не вводите посторонние механизмы, если нет оснований для этого.

+0

Простая причина для этого: клиент попросил об этом. – Jordan1200

0

Попробуйте использовать функцию ASCII

ASCII (строковое)

С помощью этой функции вы можете понять, что это действительно символ в Asset_Value колонке: например, NULL значение должно иметь код ASCII : '00' Table with character ASCII code