2017-01-30 4 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); 

Diese Abfrage ist für timeinWie kann ich diese 2 MS Access-Abfragen kombinieren?

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); 

und diese Abfrage für Timeout ist,

Wie kann ich kombinieren diese zwei Abfragen zusammen?

+0

'UNION' vielleicht? – Hexxed

Antwort

1

Diese Abfragen scheinen bis auf eine einzige Bedingung in den entsprechenden WHERE-Klauseln identisch zu sein. Die erste Abfrage hat dies:

CHECKINOUT.CHECKTYPE = "I" 

, während der zweite hat diese

CHECKINOUT.CHECKTYPE = "O" 

Ich denke, man diese beiden Bedingungen kombinieren können wie folgt:

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

Voll query:

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); 

Für Informationen purpo ses, wenn die Logik der beiden Abfragen stark unterschiedlich gewesen wäre, aber beide Abfragen die gleiche Struktur in der SELECT-Klausel hätten, hätten wir eine UNION der beiden Abfragen ausführen können.

Verwandte Themen