2017-01-30 73 views
2
SELECT 
    USERINFO.Name, USERINFO.SSN, USERINFO.Badgenumber, 
    FORMAT(CHECKINOUT.CHECKTIME,"yyyy") AS [YEAR], 
    FORMAT(CHECKINOUT.CHECKTIME,"mmmm") AS [MONTH], 
    FORMAT(CHECKINOUT.CHECKTIME,"dd") AS DAYS, 
    FORMAT((Min(CHECKINOUT.CHECKTIME)),"hh:mm am/pm") AS TIMEIN, 
    FORMAT(CHECKINOUT.CHECKTIME,"AMPM") AS [AM/PM], CHECKINOUT.CHECKTYPE 
FROM 
    CHECKINOUT 
INNER JOIN 
    USERINFO ON CHECKINOUT.USERID = USERINFO.USERID 
WHERE 
    (CHECKINOUT.CHECKTIME >= DATEVALUE(PERIOD_START) AND 
    CHECKINOUT.CHECKTIME < DATEADD("d", 1, PERIOD_END) AND 
    USERINFO.Name = Insert_Name) AND 
    CHECKINOUT.CHECKTYPE = "I" 
GROUP BY 
    CHECKINOUT.USERID, USERINFO.Name, USERINFO.SSN, 
    DateValue(CHECKINOUT.CHECKTIME), FORMAT(CHECKINOUT.CHECKTIME,"AMPM"), 
    USERINFO.Badgenumber, FORMAT(CHECKINOUT.CHECKTIME,"mmmm"), 
    FORMAT(CHECKINOUT.CHECKTIME,"yyyy"), FORMAT(CHECKINOUT.CHECKTIME,"dd"), 
    CHECKINOUT.CHECKTYPE 
HAVING 
    (((USERINFO.Badgenumber) < "8000")) 
ORDER BY 
    USERINFO.Name, Min(CHECKINOUT.CHECKTIME); 

這種查詢是timein如何將這兩個MS Access查詢結合起來?

SELECT 
    USERINFO.Name, USERINFO.SSN, USERINFO.Badgenumber, 
    FORMAT(CHECKINOUT.CHECKTIME,"yyyy") AS [YEAR], 
    FORMAT(CHECKINOUT.CHECKTIME,"mmmm") AS [MONTH], 
    FORMAT(CHECKINOUT.CHECKTIME,"dd") AS DAYS, 
    FORMAT((Max(CHECKINOUT.CHECKTIME)),"hh:mm am/pm") AS TIMEOUT, 
    FORMAT(CHECKINOUT.CHECKTIME,"AMPM") AS [AM/PM], 
    CHECKINOUT.CHECKTYPE 
FROM 
    CHECKINOUT 
INNER JOIN 
    USERINFO ON CHECKINOUT.USERID = USERINFO.USERID 
WHERE 
    (CHECKINOUT.CHECKTIME >= DATEVALUE(PERIOD_START) AND 
    CHECKINOUT.CHECKTIME < DATEADD("d", 1, PERIOD_END) AND 
    USERINFO.Name = Insert_Name) AND 
    CHECKINOUT.CHECKTYPE = "O" 
GROUP BY 
    CHECKINOUT.USERID, USERINFO.Name, USERINFO.SSN, 
    DateValue(CHECKINOUT.CHECKTIME), FORMAT(CHECKINOUT.CHECKTIME,"AMPM"), 
    USERINFO.Badgenumber, FORMAT(CHECKINOUT.CHECKTIME,"mmmm"), 
    FORMAT(CHECKINOUT.CHECKTIME,"yyyy"), FORMAT(CHECKINOUT.CHECKTIME,"dd"), 
    CHECKINOUT.CHECKTYPE 
HAVING 
    (((USERINFO.Badgenumber) < "8000")) 
ORDER BY 
    USERINFO.Name, Min(CHECKINOUT.CHECKTIME); 

和這個查詢超時,

如何我這2個查詢結合在一起?

+0

'UNION'也許? – Hexxed

回答

1

除了相應的WHERE子句中的單個條件外,這些查詢看起來是相同的。第一個查詢有這樣的:

CHECKINOUT.CHECKTYPE = "I" 

,而第二個擁有此

CHECKINOUT.CHECKTYPE = "O" 

我想你可以按如下結合這兩個條件:

WHERE ... AND CHECKINOUT.CHECKTYPE IN ("I", "O") 

全面查詢:

SELECT USERINFO.Name, 
     USERINFO.SSN, 
     USERINFO.Badgenumber, 
     FORMAT(CHECKINOUT.CHECKTIME,"yyyy") AS [YEAR], 
     FORMAT(CHECKINOUT.CHECKTIME,"mmmm") AS [MONTH], 
     FORMAT(CHECKINOUT.CHECKTIME,"dd") AS DAYS, 
     FORMAT((MIN(CHECKINOUT.CHECKTIME)), "hh:mm am/pm") AS TIMEIN, 
     FORMAT(CHECKINOUT.CHECKTIME,"AMPM") AS [AM/PM], 
     CHECKINOUT.CHECKTYPE 
FROM CHECKINOUT 
INNER JOIN USERINFO 
    ON CHECKINOUT.USERID = USERINFO.USERID 
WHERE CHECKINOUT.CHECKTIME >= DATEVALUE(PERIOD_START) AND 
     CHECKINOUT.CHECKTIME < DATEADD("d", 1, PERIOD_END) AND 
     USERINFO.Name = Insert_Name AND 
     CHECKINOUT.CHECKTYPE IN ("I", "O")  -- here is the change 
GROUP BY CHECKINOUT.USERID, 
     USERINFO.Name, 
     USERINFO.SSN, 
     DateValue(CHECKINOUT.CHECKTIME), 
     FORMAT(CHECKINOUT.CHECKTIME,"AMPM"), 
     USERINFO.Badgenumber, 
     FORMAT(CHECKINOUT.CHECKTIME,"mmmm"), 
     FORMAT(CHECKINOUT.CHECKTIME,"yyyy"), 
     FORMAT(CHECKINOUT.CHECKTIME,"dd"), 
     CHECKINOUT.CHECKTYPE 
HAVING USERINFO.Badgenumber < "8000" 
ORDER BY USERINFO.Name, 
     MIN(CHECKINOUT.CHECKTIME); 

有關信息purpo ses,這兩個查詢的邏輯差別很大,但是兩個查詢在SELECT子句中具有相同的結構,我們可能已經執行了兩個查詢的UNION