行转列、列转行演示

1、行转列

--建表
create table TEST2 
( 
  ID        NUMBER(10) not null, 
  USER_NAME VARCHAR2(20 CHAR), 
  COURSE    VARCHAR2(20 CHAR), 
  SCORE     FLOAT 
) ;

--插入基础数据

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('1', '张三', '语文', 78);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('2', '张三', '数学', 95);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('3', '张三', '英语', 81);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('4', '李四', '语文', 97);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('5', '李四', '数学', 78);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('6', '李四', '英语', 91);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('7', '王五', '语文', 68);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('8', '王五', '数学', 76);

insert into TEST2 (ID, USER_NAME, COURSE, SCORE)
values ('9', '王五', '英语', 83);

-- see table
SELECT * FROM test2;

 

--行转列测试
SELECT T.USER_NAME,
       SUM(DECODE(T.COURSE, '语文', SCORE, NULL)) AS CHINESE,
       SUM(DECODE(T.COURSE, '数学', SCORE, NULL)) AS MATH,
       SUM(DECODE(T.COURSE, '英语', SCORE, NULL)) AS ENGLISH
  FROM TEST2 T
 GROUP BY T.USER_NAME

 

2、列转行演示:

--建表
create table TEST3(  
      USER_NAME VARCHAR2(20 CHAR),   
      CHINESE    FLOAT,   
      MATH     FLOAT   ,
      ENGLISH FLOAT
    );
    
--插入基础数据   
insert into test3 (USER_NAME, CHINESE, MATH, ENGLISH) VALUES ('王五', 68, 76, 83);

insert into test3 (USER_NAME, CHINESE, MATH, ENGLISH) values ('李四', 97, 78, 91);

insert into test3 (USER_NAME, CHINESE, MATH, ENGLISH) values ('张三', 78, 95, 81);

--see table
SELECT * FROM test3;

--列转行测试
SELECT USER_NAME, '语文' COURSE, CHINESE AS SCORE
  FROM TEST3
UNION
SELECT USER_NAME, '数学' COURSE, MATH AS SCORE
  FROM TEST3
UNION
SELECT USER_NAME, '英语' COURSE, ENGLISH AS SCORE
  FROM TEST3
 ORDER BY USER_NAME, COURSE

转载于:https://www.cnblogs.com/fei-yang/p/4019458.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值