web-dev-qa-db-fra.com

Comment obtenir plusieurs colonnes dans une seule instruction SQL CASE?

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);
7
Michael.Y

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);
9
Pரதீப்

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.

1
sagi

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
1
Luqman Cheema