首页 > 数据库技术 > 详细

数据库groub by分组后,把多行数据合并成一行数据(Oracle)

时间:2019-12-20 14:53:24      阅读:228      评论:0      收藏:0      [点我收藏+]
  • 关键字 row_number() over (partition by)

   例如,下面的数据, 这是按照name分组后,展示property值。

        技术分享图片

  我们想得到这样的值;

  技术分享图片

  

  1.   第一步:将每一组的property标上序号
  select name,property,row_number() over (partition by name order by property desc) column_num from test

  得到的结果:

  技术分享图片

  partition by 后面接的就应该是将要分组的字段。如果partition by property 相当于按照property分组,那么后面的列序号column_num就是1,1,1,1,1,1,1。

  2.   第二步:按name分组后按照max或min合在一条数据中:

SELECT   NAME, MAX (DECODE (column_num, 1, property)) val1,

         MAX (DECODE (column_num, 2, property)) val2,

         MAX (DECODE (column_num, 3, property)) val3,

         MAX (DECODE (column_num, 4, property)) val4

    FROM (SELECT NAME, property, ROW_NUMBER () OVER (PARTITION BY NAME ORDER BY property DESC) column_num FROM test)

GROUP BY NAME 

  

  这样就得到了结果,如下图:

  技术分享图片

  

  数据就合成功了:电脑(电源、硬盘、显示器、cpu)

                                   相机(三脚架、记忆卡、镜头)

     分析一下,row_number()其实就是给每条记录返回一个数字,序号是从1开始。比如:

  SELECT NAME, property, ROW_NUMBER () OVER (ORDER BY property DESC) column_num FROM test

    结果是 :

  技术分享图片

  

  上面的 ROW_NUMBER () OVER (PARTITION BY NAME ORDER BY property DESC,这行的意思是按照name分组再给name分组的数据进行编号。

数据库groub by分组后,把多行数据合并成一行数据(Oracle)

原文:https://www.cnblogs.com/lioa/p/12072961.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!