我如何通过sql语句吧 1, 2 替换成 a,b,c ,吧abc替换成1,2
关键字:sql行转列
首先,纯数字不能作为字段名,我会把你的1和2,改成D1,D2
然后,这个其实很简单,思路是先把上面的字段拉到左边,作为一个二维表,然后把另一个维度再拉上去作为字段就行了
--测试数据
create table abc( id NUMBER,c varchar2(2),a varchar2(2),b varchar2(2));
insert into abc values(1,'C1','A1','B1');
insert into abc values(2,'C2','A2','B2');
COMMIT;
--查询sql
select * from (
select * from abc UNPIVOT (VAL FOR COL IN (C,A,B)))
PIVOT (MAX(VAL) FOR ID IN ('1' D1,'2' D2))
如果你的oracle 版本>= oracle 11g,可以使用pivot 和 unpivot函数
要2次才能达成你的效果,具体代码如下:
原表:
select * from abc;
ID A B C
1 a1 b1 c1
2 a2 b2 c2
-- 先unpivot 处理一下
SELECT * FROM abc UNPIVOT(temp FOR 英文 IN(A AS 'A', B AS 'B', C AS 'C'));
ID 英文 TEMP
1 A a1
1 B b1
1 C c1
2 A a2
2 B b2
2 C c2
-- 为了好看,先创建一个临时视图
create or replace view abc_temp as SELECT * FROM abc UNPIVOT(temp FOR 英文 IN(A AS 'A', B AS 'B', C AS 'C'));
-- 第3步 pivot处理一下,就能达到效果
select * from abc_temp pivot(max(temp) for id in(1, 2))
英文 1 2
A a1 a2
B b1 b2
C c1 c2