如何将两个Select语句合并到一个SQL语句

时间:2018-09-05 07:47:46

标签: sql sql-server

我正在尝试计算夜班工作的总工作时间,其中“进班时间”为昨天晚上打孔,“超时工作”为第二天早晨打孔

我尝试了两个单独的简单查询,我需要在同一查询中获得Time In&Time Out。如果有人可以帮助我,我很高兴。以下是我尝试结合使用的两个select语句

SELECT
EMP_Punch_Date'DATE',
MAX(EMP_Punch_Time)'TIME IN'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-02-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time

SELECT 
EMP_Punch_Date'DATE',
MIN(EMP_Punch_Time)'TIME OUT'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-03-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time

enter image description here

2 个答案:

答案 0 :(得分:2)

如果EMP_Punch_Datedatedatetime类型。

您可以尝试使用BETWEEN组合两个查询,因为查询之间只有一个区别是MAX列上的获取MINEMP_Punch_Time

并删除EMP_Punch_Time中的group by

SELECT
    EMP_Punch_Date 'DATE',
    MAX(CASE WHEN EMP_Punch_Date = '09-02-2018' THEN EMP_Punch_Time END) 'TIME IN' , 
    MIN(CASE WHEN EMP_Punch_Date = '09-03-2018' THEN EMP_Punch_Time END) 'TIME OUT'
FROM EMP_Event_Log
WHERE EMP_Punch_Date BETWEEN '09-02-2018' AND '09-03-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date

答案 1 :(得分:1)

您可以通过使用子查询在2query之间使用联接

select max(t1.TIMEIN),min(t2.TIMEOUT),t1.DATE,t1.EMP_Token_No from
    (
    SELECT
    EMP_Punch_Date as 'DATE',
    MAX(EMP_Punch_Time) as 'TIMEIN'
    FROM EMP_Event_Log
    WHERE EMP_Punch_Date='09-02-2018'
    GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
    ) as t1
    join
    (
    SELECT 
    EMP_Punch_Date as 'DATE',
    MIN(EMP_Punch_Time) as 'TIMEOUT'
    FROM EMP_Event_Log
    WHERE EMP_Punch_Date='09-03-2018'
    GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
    ) t2 on t1.EMP_Token_No=t2.EMP_Token_No 
    group by t1.DATE,t1.EMP_Token_No