Как получить несколько столбцов в одном операторе 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