【问题标题】: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 都有整个旅程

非常感谢

【问题讨论】:

    标签: sql sql-server select


    【解决方案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 是一个数字,则删除常量周围的双引号。数字应该与数字进行比较,而不是字符串。

    【讨论】:

    • 当前存在空值,因为某些记录不完整,因此并非所有容器都有数据来填充所有列。这是从小型试用快照记录数据,但稍后将在不应该发生这种情况的生产能力中使用。虽然非常感谢,但我不知道你可以使用最大聚合函数作为代理来允许一个组,这是一个非常有用的提示!整数是我以后会记住的。
    猜你喜欢
    • 2022-08-14
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2022-07-31
    • 1970-01-01
    相关资源
    最近更新 更多