Oracle行转列pivot

本文通过两个案例展示了如何使用SQL语句按天汇总学生的每日学习时长,并进一步按上下午进行细分汇总。案例中创建了一个名为'stu'的表来记录学生姓名、日期和对应的学习时长,并使用了Pivot操作来实现多维度的数据汇总。

案例一:

按天汇总学生每天学习时长

create table stu
(
  day  VARCHAR2(20),
  name VARCHAR2(20),
  len  NUMBER
);
INSERT INTO stu VALUES ('01', '张三', 3);
INSERT INTO stu VALUES ('01', '李四', 4);
INSERT INTO stu VALUES ('02', '张三', 1);
INSERT INTO stu VALUES ('02', '李四', 5);
INSERT INTO stu VALUES ('03', '张三', 8);
INSERT INTO stu VALUES ('03', '李四', 6);
INSERT INTO stu VALUES ('04', '张三', 3);
INSERT INTO stu VALUES ('04', '李四', 2);
INSERT INTO stu VALUES ('05', '张三', 2);
INSERT INTO stu VALUES ('05', '李四', 5);
INSERT INTO stu VALUES ('06', '张三', 7);
INSERT INTO stu VALUES ('06', '李四', 2);
INSERT INTO stu VALUES ('07', '张三', 2);
INSERT INTO stu VALUES ('07', '李四', 3);
INSERT INTO stu VALUES ('08', '张三', 1);
INSERT INTO stu VALUES ('08', '李四', 3);
INSERT INTO stu VALUES ('09', '张三', 5);
INSERT INTO stu VALUES ('09', '李四', 1);
INSERT INTO stu VALUES ('10', '张三', 6);
INSERT INTO stu VALUES ('10', '李四', 7);

select day,name,len from stu

select *
  from (SELECT name, len, day FROM stu) t
pivot(max(len)
   for day in('01',
              '02',
              '03',
              '04',
              '05',
              '06',
              '07',
              '08',
              '09',
              '10',
              '11',
              '12',
              '13',
              '14',
              '15'))

 

案例二:

 按天汇总学生每天学习时长(分上下午汇总)

create table stu
(
  day  VARCHAR2(20),
  name VARCHAR2(20),
  len  NUMBER
);
INSERT INTO stu VALUES ('01', '张三', 1);--上午
INSERT INTO stu VALUES ('01', '张三', 2);--下午
INSERT INTO stu VALUES ('01', '李四', 2);--上午
INSERT INTO stu VALUES ('01', '李四', 2);--下午
INSERT INTO stu VALUES ('02', '张三', 1);
INSERT INTO stu VALUES ('02', '李四', 3);
INSERT INTO stu VALUES ('02', '李四', 2);
INSERT INTO stu VALUES ('03', '张三', 5);
INSERT INTO stu VALUES ('03', '张三', 3);
INSERT INTO stu VALUES ('03', '李四', 2);
INSERT INTO stu VALUES ('03', '李四', 4);
INSERT INTO stu VALUES ('04', '张三', 3);
INSERT INTO stu VALUES ('04', '李四', 2);
INSERT INTO stu VALUES ('05', '张三', 2);
INSERT INTO stu VALUES ('05', '李四', 5);
INSERT INTO stu VALUES ('06', '张三', 7);
INSERT INTO stu VALUES ('06', '李四', 2);
INSERT INTO stu VALUES ('07', '张三', 2);
INSERT INTO stu VALUES ('07', '李四', 3);
INSERT INTO stu VALUES ('08', '张三', 1);
INSERT INTO stu VALUES ('08', '李四', 3);
INSERT INTO stu VALUES ('09', '张三', 5);
INSERT INTO stu VALUES ('09', '李四', 1);
INSERT INTO stu VALUES ('10', '张三', 6);
INSERT INTO stu VALUES ('10', '李四', 7);

 select day,name,len from stu

select *
  from (SELECT name, len, day FROM stu) t
pivot(sum(len)
   for day in('01',
              '02',
              '03',
              '04',
              '05',
              '06',
              '07',
              '08',
              '09',
              '10',
              '11',
              '12',
              '13',
              '14',
              '15'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值