2016-10-09 21 views
5

Tek bir CASE deyiminden birden çok sütun (bu durumda sigortalı kodu, sigortalı adı) almaya çalışıyorum.Tek bir SQL CASE deyiminde birden çok sütun nasıl alınır?

Aşağıdaki sorgu denendi, ancak hem sigortalı hem de sigortalı adı bir sütun olarak birleştiriyor.

CASE ifadesinden tam olarak iki sütun döndürmek için doğru sözdizimi nedir?

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

cevap

5

A CASE açıklamada bu

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
Ben biraz daha hızlı olabilir başka bir şey önerebilir

yapmak için iki farklı CASE ifadeleri gereken tek tek sütun değil birden çok sütun

dönebilirsiniz:

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

As Sorunuza @Prdp ne yapmanız gerektiğini gösterir.

-1

Öyle basitçe eğer doğruysa deyimi ve SQL Sonra deyimi yürütüldüğünde herhangi bir dilde/else koşulu, aksi takdirde olarak Else bölümünü yürütür, daki koşulu tanımlamak eğer gibi aşağıda açıklanan:

 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

Bu yalnızca iki sütun elde soran değil soruyu cevaplamak değil, aynı zamanda belirli bir SQL lehçesi var değildir: Informix. –

+0

Bence sanqman-cheema, açıkçası ben de yaptım, soruyu yanlış anladım. Bu yanıtı aslında buraya aramak için geldim. Yani, yukarıdaki asıl soru iki sütun istiyor SONUÇ, ve bu cevap CASE IN QUERY içinde iki sütun kullanmaktan bahsediyor ... –

İlgili konular