我想创建一个查询以从表中选择多个列,并将结果显示为单个列。我知道我可以使用此查询执行此操作:
select a from Z
union
select b from Z
union
select c from Z
union
select d from Z
....
但在我的情况下,表Z是一个约50行的子查询,我不想复制和粘贴。所以我想在Z只出现一次的查询中有这个。我不知道这是否可能。
你知道这样做的方法吗?
提前谢谢。
问候。
答案 0 :(得分: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
答案 1 :(得分:1)
您可以使用WITH clause:
执行此操作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
可用于查询的其余部分,而无需重复。