【问题标题】:How to get multiple columns in a single SQL CASE statement?如何在单个 SQL CASE 语句中获取多个列?
【发布时间】:2017-02-17 21:47:12
【问题描述】:

我正在尝试从单个 CASE 语句中获取多个列(在本例中为被保险人代码、被保险人姓名)。

已尝试以下查询,但它将被保险人代码和被保险人名称连接为一列。

从此类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);

【问题讨论】:

标签: sql case informix


【解决方案1】:

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

【讨论】:

  • 如果两种情况下的条件相同,查询引擎优化某些东西的任何想法
【解决方案2】:

我可以建议其他一些可能会稍微快一点的方法:

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 显示了你需要做什么。

【讨论】:

    【解决方案3】:

    就像任何语言的if/else条件一样,你可以在When语句中定义你的条件,如果为真,SQL执行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
    

    【讨论】:

    • 这不回答问题,不仅要求yield两列,而且还有指定的SQL方言:Informix。
    • 我认为@luqman-cheema 只是误解了这个问题,坦率地说我也是。我来这里是为了寻找这个答案,实际上:) 所以,上面的原始问题需要在结果中包含两列,而这个答案是关于在查询中的案例中使用两列...
    • 正是我想要的,谢谢! (即使有人投了你的票)
    • 正是我想要的!
    猜你喜欢
    • 2022-06-21
    • 1970-01-01
    • 2021-10-05
    • 2015-05-07
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多