按键将记录分组到具有多列的单行中
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
是一个数字,则删除常量周围的双引号。数字应该与数字进行比较,而不是字符串。
【讨论】:
当前存在空值,因为某些记录不完整,因此并非所有容器都有数据来填充所有列。这是从小型试用快照记录数据,但稍后将在不应该发生这种情况的生产能力中使用。虽然非常感谢,但我不知道你可以使用最大聚合函数作为代理来允许一个组,这是一个非常有用的提示!整数是我以后会记住的。以上是关于按键将记录分组到具有多列的单行中的主要内容,如果未能解决你的问题,请参考以下文章