2015-02-26 3 views
4

У меня есть саз что-то вроде следующихУплотненный сазе С ELSE (SQL Server)

CASE 
     WHEN A IS NULL 
     THEN CASE 
       WHEN B IN ('C','D') THEN NULL 
       WHEN X NOT IN ('C','D') THEN Z 
       End 
       ELSE SOMETHING_ELSE -- Want to get here When 'A' IS NOT NULL 
       END AS 'Result' 

Я хочу, чтобы добраться до ELSE частей, когда первый случай не верно я-е «А» не NULL. Может ли кто-нибудь предложить, если я неправильно вложил их? не получив результатов правильно.

Большое спасибо,

ответ

9

Во-первых, вам не нужно влагать case заявлений. Просто используйте один случай:

select (CASE WHEN A IS NULL AND B IN ('C', 'D') THEN NULL 
      WHEN A IS NULL AND X NOT IN ('C','D') THEN Z 
      WHEN A IS NOT NULL THEN SOMETHING_ELSE 
     END) as Result 

Обратите внимание, что когда A IS NULL но первые два условия не встречались, то возвращаемое значение будет NULL.

Поскольку case заявления оцениваются последовательно, это проще написать как:

select (CASE WHEN A IS NOT NULL THEN SOMETHING_ELSE 
      WHEN B IN ('C', 'D') THEN NULL 
      WHEN X NOT IN ('C', 'D') THEN Z 
     END) as Result 

Первое условие фиксирует, когда A не NULL. Следовательно, вторая вторая, когда A - NULL.

4

Вы можете добавить второй Когда ваш случай, когда вы можете проверить второе условие и установить значение в противном случае установить значение по умолчанию.

CASE 
    WHEN A IS NULL THEN CASE 
          WHEN B IN ('C','D') THEN NULL 
          WHEN X NOT IN ('C','D') THEN Z 
         End 
    WHEN A IS NOT NULL THEN yourdesiredvalue 
    ELSE default value 
    END AS 'Result' 
+0

Это даст мне результат, даже если frist CASE is true – InTheWorldOfCodingApplications

+0

Как возможно, что 'A' является как' NULL', так и 'NOT NULL' в то же время. ?? –

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