1

我想创建一个查询以从表中选择几列,并将结果显示为单列。我知道我可以用这个查询来做到这一点:

select a from Z
union
select b from Z
union 
select c from Z
union 
select d from Z
....

但就我而言,表 Z 是大约 50 行的子查询,我不想复制和粘贴。所以我想在 Z 只出现一次的查询中使用它。我不知道这是否可能。

你知道这样做的方法吗?

先感谢您。

问候。

4

2 回答 2

3

从 Oracle 11gR1 及更高版本开始,您可以使用unpivot运算符,当然要确保所有列都具有相同的数据类型:

SQL> select val
  2    from (select 1 col1
  3               , 2 col2   
  4               , 3 col3
  5            from dual)
  6  unpivot(
  7    val for col in (col1, col2, col3)
  8  )
  9  ;

       VAL
----------
         1
         2
         3
于 2013-09-17T14:47:23.250 回答
1

您可以使用WITH 子句来做到这一点:

with Z as (
    select ... from ... -- <<== Put your big query here
)
select a from Z
union
select b from Z
union 
select c from Z
union 
select d from Z

with顶部的子句Z可用于查询的其余部分,而无需重复。

这是关于 sqlfiddle 的演示

于 2013-09-17T14:46:48.750 回答