按键将记录分组到具有多列的单行中

Posted

技术标签:

【中文标题】按键将记录分组到具有多列的单行中【英文标题】:Grouping Records by Key into a single row with multiple columns 【发布时间】:2020-09-23 15:05:40 【问题描述】:

我正在努力按自己的意愿安排数据。 本质上,我的目标是跟踪容器旅程,通过查看它进入和离开这些位置的时间来测量它在这些位置花费的时间

我从中拉出的桌子如图所示

我的代码在下面

INSERT #EXAMTIME
SELECT
Container_FK
,case when Move_Indicator = '0' then OffChasisTime else null end 
,case when Move_Indicator = '1' then OnChasisTime else null end 
,case when Move_Indicator = '1' then OffChasisTime else null end 
,case when Move_Indicator = '3' then OnChasisTime else null end 
,case when Move_Indicator = '3' then OffChasisTime else null end 
,case when Move_Indicator = '4' then OnChasisTime else null end 
FROM #EXTRACT

这是输出表

如您所见,数据各占一行,我想按 Container_FK 分组,以便每个 Entry 都有整个旅程

非常感谢

【问题讨论】:

【参考方案1】:

使用聚合:

select Container_FK,
       max(case when Move_Indicator = '0' then OffChasisTime else null end),
       max(case when Move_Indicator = '1' then OnChasisTime else null end),
       max(case when Move_Indicator = '1' then OffChasisTime else null end),
       max(case when Move_Indicator = '3' then OnChasisTime else null end),
       max(case when Move_Indicator = '3' then OffChasisTime else null end),
       max(case when Move_Indicator = '4' then OnChasisTime else null end)
from #EXTRACT
group by Container_FK;

请注意,else null 是多余的,所以它只是浪费打字。此外,如果 Move_Indicator 是一个数字,则删除常量周围的双引号。数字应该与数字进行比较,而不是字符串。

【讨论】:

当前存在空值,因为某些记录不完整,因此并非所有容器都有数据来填充所有列。这是从小型试用快照记录数据,但稍后将在不应该发生这种情况的生产能力中使用。虽然非常感谢,但我不知道你可以使用最大聚合函数作为代理来允许一个组,这是一个非常有用的提示!整数是我以后会记住的。

以上是关于按键将记录分组到具有多列的单行中的主要内容,如果未能解决你的问题,请参考以下文章

Hive Query 在 Select 中具有多列并按一列分组

如何在 MySQL Select 语句中按多列分组

基于多列中的直接和间接相似性对变量进行分组的快速方法

如何对具有多列的表中的数据进行分组[重复]

geom_area 具有分布在多列中的分组变量

具有分组的数据表中多行和多列的中位数