You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何将Entrada与Salida日期合并到同一行?

解决打卡记录合并到同一行的问题

Hey Jose, 我明白你的需求了——当前查询会把员工的「上班(Entrada)」和「下班(Salida)」记录拆分成两行,现在要把它们合并成同一行展示。我们可以通过聚合函数结合分组的方式来实现这个目标,具体方案如下:

修改后的查询语句

SELECT 
    e.IdEmpleado, 
    e.Cedula, 
    e.Nombre, 
    e.Apellido,
    -- 提取当天的上班日期(自动忽略NULL值)
    MAX(CASE mo.Sentido WHEN 'Entrada' THEN CAST(mo.FechaHora AS DATE) END) AS Entrada,
    -- 提取当天的下班日期(自动忽略NULL值)
    MAX(CASE mo.Sentido WHEN 'Salida' THEN CAST(mo.FechaHora AS DATE) END) AS Salida
FROM BAMBA.dbo.EMPLEADO e
LEFT JOIN BAMBA.dbo.MARCACIONES_PARA_LIQUIDACION mo 
    ON e.IdEmpleado = mo.IdEmpleado 
    AND CAST(mo.FechaHora AS DATE) BETWEEN '2018-04-24' AND '2018-04-24'
WHERE e.IdCentroCosto='14'
-- 按员工唯一标识分组,确保同一员工的打卡记录合并到一行
GROUP BY e.IdEmpleado, e.Cedula, e.Nombre, e.Apellido

关键逻辑说明

  • 聚合函数MAX():你的CASE语句会在非匹配的记录上返回NULL,MAX()会自动跳过这些无效值,只保留有效的上班/下班日期。如果员工当天只有上班或只有下班记录,对应的列会显示NULL,完全适配你原查询的LEFT JOIN需求。
  • GROUP BY子句:通过员工的唯一识别信息(IdEmpleado、Cedula等)分组,就能把同一员工的多条打卡记录收拢到同一行中。

额外提示

如果业务需要展示具体的打卡时间(而非仅日期),只需把CAST(mo.FechaHora AS DATE)改成mo.FechaHora即可,聚合函数依然能正常提取有效的时间值。

内容的提问来源于stack exchange,提问作者Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:36