在 Oracle Sql 中的 Select 语句中根据条件排除和包含列标题

Posted

技术标签:

【中文标题】在 Oracle Sql 中的 Select 语句中根据条件排除和包含列标题【英文标题】:Exclude and Include column header based on condition in Select statement in Oracle Sql 【发布时间】:2016-07-08 05:33:02 【问题描述】:

我有一张表,其架构如下

Documentno  created      docstatus
498461      08-OCT-14    IN
501681      27-OCT-14    IN
544491      19-AUG-15    IP
550041      28-SEP-15    IP

输出应该是像

这样的格式
select Documentno, created from c_order where docstatus in ('IP')
Documentno  created      
544491      19-AUG-15    
550041      28-SEP-15    

select Documentno, created,docstatus from c_order where docstatus in ('IN')
Documentno  created      docstatus
498461      08-OCT-14    IN
501681      27-OCT-14    IN

联合的预期输出

  Documentno     created      
    544491      19-AUG-15    
    550041      28-SEP-15   
  Documentno   created       docStatus
    498461      08-OCT-14    IN
    501681      27-OCT-14    IN

这可能在 sql select 语句中吗? 我尝试过使用 Case 但它仅适用于 Value 不适用于列名 请任何人指导我如何在 oracle 中实现此 select 语句?

【问题讨论】:

【参考方案1】:

你必须给出列名,至少它应该由一个字符组成

测试数据

with t(Documentno,
created,
docstatus) as
 (select 498461, sysdate, 'IN'
    from dual
  union all
  select 501681, sysdate + 1, 'IN'
    from dual
  union all
  select 544491, sysdate + 2, 'IP'
    from dual
  union all
  select 550041, sysdate + 3, 'IP'
    from dual)

查询

  select Documentno, created, null as " "
      from t
     where docstatus in ('IP')
    union all
    select null, null, 'STATUS'
      from dual
    union all
    select Documentno, created, docstatus from t where docstatus in ('IN')

输出

DOCUMENTNO CREATED
---------- -------- ------
    544491 10/07/16
    550041 11/07/16
                    STATUS
    498461 08/07/16 IN
    501681 09/07/16 IN

【讨论】:

以上是关于在 Oracle Sql 中的 Select 语句中根据条件排除和包含列标题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:SELECT 语句中的内联表?

SQL 查询的 SELECT 子句中 Oracle PL/SQL 语句的延迟评估

如何从 oracle pl sql 中的包主体内的 select 语句中捕获特定列

如何写sql语句去掉oracle返回结果中的空值(NULL)

在 oracle SQL 中,有没有一种好方法可以按年份或其他一些不在 select 语句中的变量来分解聚合结果?

Oracle 中sql语句中的取前n条数据