个人随笔
目录
Oracle行转列例子
2022-07-11 11:49:36

有时候,我们需要对表中的数据进行行转列,来统计,比如,假如我们有一个奖品表(award),有字段(user_name,award_name,create_datetime),有如下数据。

user_name award_name create_date
张三 手机 2022-07-11
张三 大米 2022-07-06
李四 手机 2022-07-11
李四 大米 2022-07-06

我们要统计每个用户获得的奖品以及获得时间怎么处理呢?

也就是我们需要查询出如下格式的数据

user_name shouji shouji_create_date dami dami_create_date
张三 手机 2022-07-11 大米 2022-07-06
李四 手机 2022-07-11 大米 2022-07-06

这就相当于进行了行转列,本来表中每个用户都会有几条记录的,行转列后就每个用户只有一条了,那这条sql怎么写呢?

  1. select t.user_name ,
  2. MAX(CASE t.award_name WHEN '手机' THEN t.award_name ELSE '0' END) AS shouji,
  3. MAX(CASE t.award_name WHEN '手机' THEN t.create_date ELSE '0' END) AS shouji_create_date,
  4. MAX(CASE t.award_name WHEN '大米' THEN t.award_name ELSE '0' END) AS dami,
  5. MAX(CASE t.award_name WHEN '大米' THEN t.create_date ELSE '0' END) AS dami_create_date,
  6. from award t where t award_name in('手机','大米')
  7. group by user_name

上面就是Oracle的行转列,主要要注意的是哪些列转为一行要根据award_name来做区分。

  1. MAX(CASE t.award_name WHEN '手机' THEN t.award_name
  2. MAX(CASE t.award_name WHEN '手机' THEN t.create_date
 282

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2