日期:2014-05-17  浏览次数:20840 次

列转行的问题
行转列的问题见的比较多,列转行怎么做;
比如现在有表定义如下
Table t1
f1 f2 f3
A 1 2
B 3 4
想得到下面的结果

A f2 1
A f3 2
B f2 3
B f3 4

------解决方案--------------------
with t1 as
(
select 'A' f1, 1 f2, 2 f3 from dual
union all
select 'B' f1, 2 f2, 4 f3 from dual
)
select t1.f1,
case when t2.f1 = 'F2' then t1.f2 
when t2.f1 = 'F3' then t1.f3 else null end
from t1,
(select 'F2' f1 from dual
union all
select 'F3' f1 from dual) t2

------解决方案--------------------
with t1 as
(
select 'A' f1, 1 f2, 2 f3 from dual
union all
select 'B' f1, 2 f2, 4 f3 from dual
)
select t1.f1,t2.f1 f3,
case when t2.f1 = 'F2' then t1.f2 
when t2.f1 = 'F3' then t1.f3 else null end
from t1,
(select 'F2' f1 from dual
union all
select 'F3' f1 from dual) t2

------解决方案--------------------
select f1, 'f2', f2
from t1
  
union all

select f1, 'f3', f3
from t1

--order by ...

按什么排序,自已加上就行