我们有一个表格,其形式为:
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。
这适用于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,滥用递归查询会更普遍一些。(不过,使用联合生成行可移植到其他数据库中)