在Oracle SQL中将多行分组为一行
如何使图1中的数据集看起来像图2中的数据。基本上,我不想把每次购买都放在自己的线上,而是想按姓名分组,让所有的人都在一条线上购买。他们最多可以购买5件物品,我的数据库中大约有3000万行物品 另外,日期顺序并不重要 您可以使用行数和条件聚合:在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,
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));