需要有关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,但无法弄清楚
答案 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