2016-10-09 11 views
5

Próbuję uzyskać wiele kolumn (ubezpieczony kod, nazwa ubezpieczenia w tym przypadku) z pojedynczego oświadczenia CASE.Jak uzyskać wiele kolumn w pojedynczej instrukcji SQL CASE?

Następujące zapytanie zostało wypróbowane, ale łączy ono zarówno ubezpieczony kod, jak i nazwę ubezpieczenia jako jedną kolumnę.

Jaka jest prawidłowa składnia, aby zwrócić dokładnie dwie kolumny z takiej instrukcji 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); 

Odpowiedz

5

CASE oświadczenie może wrócić tylko jeden nie kolumnę wielu kolumn

Potrzebne są dwa różne CASE wypowiedzi to zrobić

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); 
1

mogę zaproponować coś innego, co może być nieco szybciej:

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); 

Jako na twoje pytanie, @Prdp pokazuje, co musisz zrobić.

-1

To jest po prostu jak gdyby/stan indziej w dowolnym języku, można zdefiniować swoją kondycję w Kiedy oświadczenie i czy to prawda, SQL wykonuje Then oświadczenie, inaczej wykonuje Else udział, jako opisane poniżej:

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

To nie jest odpowiedź na pytanie, co jest nie tylko z prośbą o uzyskując dwie kolumny, ale ma również określony dialekt SQL: Informix. –

+0

Myślę, że @ luqman-cheema właśnie źle zrozumiał pytanie, tak jak szczerze mówiąc. Przyszedłem tutaj, szukając tej odpowiedzi, faktycznie :) Tak więc oryginalne pytanie powyżej wymaga dwóch kolumn W WYNIKU, a ta odpowiedź mówi o użyciu dwóch kolumn w CASE IN THE QUERY ... –

Powiązane problemy