python 行转列_Oracle实现行转列,列转行(经典)

已经创建的一张表,查询如图:

select * from tb_student;

实现行转列: 用decode(或者:case when ):

select name,

min(decode(course, '语文', score)) 语文,

min(decode(course, '数学', score)) 数学,

min(decode(course, '英语', score)) 英语

from tb_student

group by name;

如图:

反之: 如何用列表转行?

用union all

将结果集生成一个新表:TB_COPY

SELECT * FROM TB_COPY;

如图:

实现列转换:

select * from (select name , '语文' course,min(语文) fenshu from tb_copy group by name

union all

select name ,'数学' course ,min(数学)fenshu from tb_copy group by name

union all

select name ,'英语'course,min(英语)fenshu from tb_copy group by name )where fenshu is not null order by name

如图:

--------------------------------------------------------------------------------------------------------------补充 例子:

CREATE TABLE T_CITY(

CITYNAME VARCHAR2(16),

COURSE VARCHAR2(32),

C_NUM VARCHAR2(16)

)

INSERT INTO T_CITY VALUES('北京尚学堂','Java班','9980人');

INSERT INTO T_CITY VALUES('北京尚学堂','大数据班','2808人');

INSERT INTO T_CITY VALUES('北京尚学堂','python班','200人');

INSERT INTO T_CITY VALUES('上海尚学堂','Java班','2800人');

INSERT INTO T_CITY VALUES('上海尚学堂','大数据班','532人');

SELECT * FROM T_CITY

如图:

实现行转列:

--用case when

SELECT CITYNAME,MIN(CASE COURSE

WHEN 'Java班' THEN C_NUM END) "Java班" ,

MIN(CASE COURSE

WHEN '大数据班' THEN C_NUM END) "大数据班",

MIN(CASE COURSE

WHEN 'python班' THEN C_NUM END)"python班" FROM T_CITY GROUP BY CITYNAME;

--用 decode

SELECT CITYNAME, MIN(DECODE (COURSE,

'Java班',C_NUM)) AS "Java班",

MIN(DECODE (COURSE,

'大数据班',C_NUM)) AS "大数据班",

MIN(DECODE (COURSE,

'python班',C_NUM))AS "python班" FROM T_CITY GROUP BY CITYNAME

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值