将多行数据转换成单行sql

时间:2017-04-21 13:34:22

标签: sql sql-server sql-server-2012

我有以下查询:

SELECT EMPLID, APDATE, STARTTIME, ENDTIME
from MYTIME

结果样本:

1234,4/1/2017,8:00,12:00
1234,4/1/2017,13:00,21:00
1234,4/2/2017,23:00,07:00
1234,4/2/2017,08:00,11:00
4444,4/1/2017,08:00,15:00
4444,4/2/2017,14:00,18:00
4444,4/2/2017,19:00,21:00

我需要帮助构建一个基于emplid和apdate匹配返回单行的查询。如果emplid和apdate匹配,则将所有开始时间和结束时间返回到单行。以下是我正在寻找的使用上述样本结果的内容:

1234,4/1/2017,8:00,12:00,13:00,21:00
1234,4/2/2017,13:00,21:00,23:00,0700
4444,4/1/2017,08:00,15:00,NULL,NULL
4444,4/2/2017,14:00,18:00,19:00,21:00

1 个答案:

答案 0 :(得分:1)

GROUP BY。使用MIN()第一次选择。如果MAX() > MIN(),也请选择上次(否则为null)。

SELECT EMPLID, APDATE, MIN(STARTTIME), MIN(ENDTIME),
       case when MAX(STARTTIME) > MIN(STARTTIME) then MAX(STARTTIME) end,
       case when MAX(ENDTIME) > MIN(ENDTIME) then MAX(ENDTIME) end
from MYTIME
GROUP BY EMPLID, APDATE