Могу ли я выбрать несколько столбцов в зависимости от SELECT CASE? - PullRequest
4 голосов
/ 29 июня 2010

Основываясь на SELECT CASE ниже, я хочу показать два отдельных столбца в одном WHEN. Это возможно?

Две закомментированные строки ниже являются чем-то вроде того, что я хотел бы иметь. Я уверен, что это что-то очень простое, что мне не хватает. На самом деле, есть синтаксическая ошибка.

select 
    person.FirstName,
    person.LastName,
    CASE 
        --WHEN substatus is not null then 'HasSubstatus', null
        --else null, 'DoesNotHaveSubstatus'
        WHEN substatus is not null then 'HasSubstatus'
        else null
    end
from Person person

Ответы [ 3 ]

4 голосов
/ 29 июня 2010

Вы не можете сделать это в отдельных выражениях Case, так как выражение Case возвращает одно значение.Вы должны использовать два выражения Case.

Select  person.FirstName
    , person.LastName
    , Case When substatus is not null Then 'HasSubstatus' End As [HasSubstatus]
    , Case When substatus is null Then 'DoesNotHaveSubstatus' End As [DoesNotHaveSubstatus]
From Person person
1 голос
/ 29 июня 2010

Вы не можете.

Вам нужно будет повторить оператор case, если вы имеете в виду, что хотите применить одну и ту же условную логику к 2 столбцам или иметь ее как отдельный запрос, если вы имеете в виду, что в одном случае он должен возвращать два столбца и вдругой случай один столбец.

0 голосов
/ 29 июня 2010

Вы можете сделать это с if() и isnull() (, этот синтаксис будет работать только в mySql )

select 
    person.FirstName,
    person.LastName,
    IF( ISNULL(substatus),'HasSubstatus', null ) AS DoesHave,
    IF( ISNULL(substatus),null,'DoesNotHaveSubstatus'  ) AS DoesNotHave,
from Person person
...