J'essaie d'obtenir plusieurs colonnes (assurecode, assuréname dans ce cas) à partir d'une seule déclaration CASE
.
La requête suivante a été essayée, mais elle concatène le code assuré et le nom de nom assuré sous la forme d'une colonne.
Quelle est la syntaxe correcte pour renvoyer exactement deux colonnes d'une telle instruction 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);
Une instruction CASE
ne peut renvoyer qu'une seule colonne et non plusieurs colonnes.
Pour cela, vous avez besoin de deux instructions CASE
différentes.
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);
Je peux suggérer autre chose qui pourrait être légèrement plus rapide:
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);
En ce qui concerne votre question, @Prdp montre ce que vous devez faire.
C'est simplement comme si la condition/else dans n'importe quelle langue, vous pouvez définir votre condition dans l'instruction When et si c'est vrai, SQL exécute l'instruction Then, sinon exécute la partie Else décrit ci-dessous:
Select
CASE
WHEN (cs.ResultSubmitToHOD = 1) THEN 'HOD'
WHEN (cs.ResultSubmitToExamDep = 1) THEN 'Exam'
ELSE 'Teacher'
END AS ResultSubmitStatus
From dbo.CourseSection as cs