SQL-使用非空分组

时间:2018-10-28 23:37:28

标签: sql

需要有关SQL查询的帮助。具体来说,展平成单行。

表格列:

Unit, StartDate, MoveDate, NextDate, AfterDate, IncidentId 

数据行

E11, 1/1/2010, null, null, null, F1
E11, null, 1/1/2011, null, null, F1
E11, null, null, 1/1/2012, null, F1
E12, 1/1/2011, null, null, null, F1
E12, null, 1/2/2013, null, null, F1

我的目标是:

E11, 1/1/2010, 1/1/2011, 1/1/2012, null, F1
E12 1/1/2011, 1/2/2013, null, null, F1 

我认为一个简单的分组依据会起作用:

SELECT Unit, StartDate, MoveDate, NextDate, AfterDate, IncidentId 
FROM UnitTable
WHERE IncidentID = 'F1' 
GROUP BY Unit, StartDate, MoveDate, NextDate, AfterDate, IncidentId 

但是我当然不能在1行上得到所有内容。

我认为这应该是一个简单的SQL,但无法弄清楚

2 个答案:

答案 0 :(得分:1)

您可以使用此:

SELECT Unit, max(StartDate) StartDate, max(MoveDate) MoveDate, Max(NextDate) NextDate, Max(AfterDate) AfterDate, Max(IncidentId) IncidentId
FROM UnitTable
WHERE IncidentID = 'F1' 
GROUP BY Unit, StartDate, MoveDate, NextDate, AfterDate, IncidentId 

答案 1 :(得分:1)

您不想对所有字段进行GROUP BY,这基本上只是SELECT DISTINCT。将您要汇总的字段分组,并使用其余的最大值。

drop table if exists #temp
go

select *
    into #temp
    from (
        values
         ('E11', '1/1/2010', null, null, null, 'F1')
        ,('E11', null, '1/1/2011', null, null, 'F1')
        ,('E11', null, null, '1/1/2012', null, 'F1')
        ,('E12', '1/1/2011', null, null, null, 'F1')
        ,('E12', null, '1/2/2013', null, null, 'F1')
    ) t(Unit, StartDate, MoveDate, NextDate, AfterDate, IncidentId )

SELECT Unit, max(StartDate) StartDate, max(MoveDate) MoveDate, Max(NextDate) NextDate, Max(AfterDate) AfterDate, Max(IncidentId) IncidentId
    FROM #temp
    GROUP BY Unit