我们有一个表格形式:
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来自双重)”.对于Oracle来说,滥用递归查询更为通用. (但是,使用联合生成行可以移植到其他数据库)