Как получить несколько столбцов в одном операторе SQL CASE?

Я пытаюсь получить несколько столбцов (insuredcode, insuredname в этом случае) из одного CASE заявление.

был опробован следующий запрос, но он объединяет insuredcode и insuredname как один столбец.

каков правильный синтаксис для возврата ровно двух столбцов из таких CASE заявление?

select
    case
        when a.policyno[2] in ('E', 'W') then c.insuredcode || c.insuredname
        else b.insuredcode || b.insuredname
    end
from prpcmain a
left join prpcinsured_1 b on b.proposalno=a.proposalno 
left join prpcinsured_2 c on c.proposalno=a.proposalno
where a.policyno in (select policyno from policyno_t);

3 ответов


A CASE оператор может возвращать только один столбец, а не несколько столбцов

вам нужно два разных CASE операторы для этого

select
    case
        when a.policyno[2] in ('E', 'W') then c.insuredcode 
        else b.insuredcode 
    end as insuredcode ,
    case
        when a.policyno[2] in ('E', 'W') then  c.insuredname
        else b.insuredname
    end as insuredname
from prpcmain a
left join prpcinsured_1 b on b.proposalno=a.proposalno 
left join prpcinsured_2 c on c.proposalno=a.proposalno
where a.policyno in (select policyno from policyno_t);

Я могу предложить что-то еще, что может быть немного быстрее :

SELECT s.insuredcode,s.insuredname FROM (
    SELECT a.policyno,b.insuredcode,b.insuredname
    FROM prpcmain a
    left join prpcinsured_1 b on b.proposalno=a.proposalno 
    WHERE a.policyno[2] not in ('E', 'W')
    UNION ALL
    SELECT a.policyno,c.insuredcode,c.insuredname
    FROM prpcmain a
    left join prpcinsured_2 c on c.proposalno=a.proposalno 
    WHERE a.policyno[2]  in ('E', 'W')
) s
where s.policyno in (select policyno from policyno_t);

что касается вашего вопроса, @Prdp показывает, что нужно делать.


это просто как if / else условие на любом языке, вы можете определить свое условие в , когда оператор, и если это правда, SQL выполняет затем заявление, в противном случае выполняется другое часть, как описано ниже:

     Select 
                 CASE 
                    WHEN (cs.ResultSubmitToHOD = 1) THEN 'HOD'
                    WHEN (cs.ResultSubmitToExamDep = 1) THEN 'Exam'
                    ELSE 'Teacher'
                END AS ResultSubmitStatus
     From dbo.CourseSection as cs