Tsql: возможно ли делать вложенные операторы case в select?

Как включить вложенный оператор if в предложении select запроса sql? Я знаю, что использовать случай, когда условие, тогда X else y end, но как вы делаете вложенное одно для каждой записи в наборе записей.

if x.boy is not null then 
   x.boy 
else if x.girl is not null
   then x.girl 
else if x.dog is not null 
   then x.dog
else 
    x.cat 

вот моя попытка:

SELECT top 10
        id,
        case when x.boy <> NULL then 
            x.boy
        else case when  x.girl <> NULL 
            x.girl
                else case when  x.dog <> NULL 
            x.dog
                else x.cat 

        end as Who 
from house x

Правильно ли это?

Ответы

Ответ 1

Вы можете упростить это с помощью COALESCE.

SELECT TOP 10 id, COALESCE(x.boy, x.girl, x.dog, x.cat) as Who
    FROM house x

Ответ 2

Да. Нет ничего плохого в случае в случае.

Хотя, вот ваш script, написанный по-разному:

SELECT top 10
    id,
    case
        when x.boy IS NOT NULL then x.boy
        else case
            when x.girl IS NOT NULL THEN x.girl
            else case
                when x.dog IS NOT NULL THEN x.dog
                else x.cat
            end
        end
    end as Who 
from house x

ИЛИ

SELECT top 10
    id,
    case
        when x.boy IS NOT NULL then x.boy
        when x.girl IS NOT NULL THEN x.girl
        when x.dog IS NOT NULL THEN x.dog
        else x.cat
    end as Who 
from house x

ИЛИ

SELECT top 10
    id,
    coalesce(x.boy, x.girl, x.dog, x.cat) AS Who
from house x

Ответ 3

Попробуйте следующее:

SELECT top 10
        id,
        case when x.boy Is Not NULL then x.boy
        else 
              case when  x.girl Is Not NULL then x.girl
              else 
                    case when  x.dog Is Not Null Then x.dog
                    else x.cat End
               End

        end as Who 
from house x

хотя вы могли бы просто использовать coalesce, как предложил Джо.