如何在单个SQL CASE语句中获取多个列?

时间:2016-10-09 09:11:24

标签: sql case informix

我正在尝试从单个CASE语句中获取多个列(在这种情况下为insuredcode,insuredname)。

已尝试以下查询,但它将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 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

我可以推荐一些可能稍微快一些的东西:

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显示了您需要做的事情。

答案 2 :(得分:1)

  

就像if / else条件在任何语言中一样,您可以在 When 语句中定义条件,如果是,则执行 Then 语句,否则执行 Else 部分,如下所述:

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