Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle SQL中将多行分组为一行_Sql_Oracle_Aggregate_Grouping - Fatal编程技术网

在Oracle SQL中将多行分组为一行

在Oracle SQL中将多行分组为一行,sql,oracle,aggregate,grouping,Sql,Oracle,Aggregate,Grouping,如何使图1中的数据集看起来像图2中的数据。基本上,我不想把每次购买都放在自己的线上,而是想按姓名分组,让所有的人都在一条线上购买。他们最多可以购买5件物品,我的数据库中大约有3000万行物品 另外,日期顺序并不重要 您可以使用行数和条件聚合: select name, max(case when seqnum = 1 then item end) as item_1, max(case when seqnum = 1 then date end) as date_1,

如何使图1中的数据集看起来像图2中的数据。基本上,我不想把每次购买都放在自己的线上,而是想按姓名分组,让所有的人都在一条线上购买。他们最多可以购买5件物品,我的数据库中大约有3000万行物品

另外,日期顺序并不重要

您可以使用行数和条件聚合:

select name,
       max(case when seqnum = 1 then item end) as item_1,
       max(case when seqnum = 1 then date end) as date_1,
       max(case when seqnum = 2 then item end) as item_2,
       max(case when seqnum = 2 then date end) as date_2,
       max(case when seqnum = 3 then item end) as item_3,
       max(case when seqnum = 3 then date end) as date_3
from (select t.*,
             row_number() over (partition by name order by date asc) as seqnum
      from t
     ) t
group by name;
您可以使用行数和条件聚合:

select name,
       max(case when seqnum = 1 then item end) as item_1,
       max(case when seqnum = 1 then date end) as date_1,
       max(case when seqnum = 2 then item end) as item_2,
       max(case when seqnum = 2 then date end) as date_2,
       max(case when seqnum = 3 then item end) as item_3,
       max(case when seqnum = 3 then date end) as date_3
from (select t.*,
             row_number() over (partition by name order by date asc) as seqnum
      from t
     ) t
group by name;
您可以使用具有行号的轴,如下所示:

Select * from 
   (select t.*,
           row_number() over (partition by name order by date_purchased) rn
      from your_table t
  ) PIVOT
(Max(item_purchased), max(date_purchased) For rn in (1,2,3));
您可以使用具有行号的轴,如下所示:

Select * from 
   (select t.*,
           row_number() over (partition by name order by date_purchased) rn
      from your_table t
  ) PIVOT
(Max(item_purchased), max(date_purchased) For rn in (1,2,3));