这是 我oracle数据库中的数据

img

我如何通过sql语句吧 1, 2 替换成 a,b,c ,吧abc替换成1,2

img

关键字: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))

img

如果你的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