小编典典

单个SQL SELECT从一个表行返回多行

sql

我们有一个表格,其形式为:

ID,Value1,Value2,Value3
1,2,3,4

我们需要将其转化为。

ID,Name,Value
1,'Value1',2
1,'Value2',3
1,'Value3',4

是否有一个聪明的方法可以在一个SELECT语句中执行此操作(即不使用UNION)?列名称Value1,Value2和Value3是固定的且恒定的。

该数据库是oracle 9i。


阅读 199

收藏
2021-04-22

共1个答案

小编典典

这适用于Oracle 10g:

select id, 'Value' || n as name,
       case n when 1 then value1 when 2 then value2 when 3 then value3 end as value
from (select rownum n
      from (select 1 from dual connect by level <= 3)) ofs, t

我认为Oracle
9i有递归查询吗?无论如何,我非常确定它具有CASE支持,因此即使它没有递归查询,也可以执行“(从双联合中选择1,从双联合中选择2,从双联合中选择3,从双重中选择3)”代替。对于Oracle,滥用递归查询会更普遍一些。(不过,使用联合生成行可移植到其他数据库中)

2021-04-22