暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在case语句中返回多列

askTom 2018-04-10
2151

问题描述

我有查询像:

select case when 1 in (1,2,3) then
(select 'abc' as "name 1",'xyz' as "name 2" from dual)
else 'pqr' end from dual; 
复制


如果满足条件,如何返回两列?

专家解答

简短的答案是你不能。更长的答案是你可以做这样的事情:

-用已知的分隔符将所有列连接成一列。然后把它们分开
-将值加载到XML文档并根据需要提取

select  case
          when 1 in ( 1, 2, 3 ) then 
            xmltype ( cursor (
              select 'abc' as "name 1", 'xyz' as "name 2"
              from   dual
              )
            )
          else xmltype ( cursor ( 
            select 'pqr' as "name 1"
            from   dual
            )
          )
        end
from   dual;

CASEWHEN1IN(1,2,3)THENXMLTYPE(CURSOR(SELECT'ABC'AS"NAME1",'XYZ'AS"NAME2"FROMDUAL))ELSEXMLTYPE(CURSOR(SELECT'PQR'AS"NAME1
------------------------------------------------------------------------------------------------------------------------


  
    abc
    xyz
  
复制


等等。

但是这些都很麻烦。它通常更容易有两个案例表达式,第二个返回null在else:

select  case
          when 1 in ( 1, 2, 3 ) then 
            'abc' 
          else 'pqr' 
        end "name 1",
        case
          when 1 in ( 1, 2, 3 ) then 
            'xyz'
          else null 
        end "name 2"
from   dual;

name 1   name 2   
abc      xyz  
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论