Access 2003: как объединить два запроса - PullRequest
0 голосов
/ 28 сентября 2010

Я пишу свое первое маленькое приложение Access 2003. У меня есть два запроса, которые я не могу понять, как объединить. То, что я ищу, - это получить все номера маршрутов в диапазоне дат, подсчитать общее количество строк на маршрут в диапазоне дат и подсчитать, сколько опоздало. У меня есть эти два запроса, которые помогают мне в этом, но я не могу понять, как их объединить в запросе Access.

PARAMETERS StartDate DateTime, EndDate DateTime;
SELECT [ROUTE #], Count(*) AS Total
FROM [On time performace audits] 
WHERE ((([On time performace audits].DATE) Between [StartDate] And [EndDate]))
GROUP BY [Route #];

PARAMETERS StartDate DateTime, EndDate DateTime;
SELECT [Route #], Count(*) as Late
FROM [On time performace audits]
WHERE ([On time performace audits].DATE Between [StartDate] And [EndDate]) AND (    Minute( [ACTUAL TIME]- [SCHEDULED TIME]) >=6)
GROUP BY [Route #];

Я не столько человек SQL, сколько парень LINQ, и писать быстрое и грязное приложение в Access 2003 после привыкания к VS2010 немного больно. В любом случае, надеюсь, вы можете помочь. Спасибо.

Ответы [ 3 ]

0 голосов
/ 01 октября 2010

Вы также можете использовать запрос UNION [ALL], чтобы объединить наборы результатов в один ...

0 голосов
/ 06 октября 2010

вопрос в том, как объединить два запроса.UNION ALL будет лучшим способом IMO, как это:

PARAMETERS StartDate DateTime, EndDate DateTime;
SELECT 'All' As Type, [ROUTE #], Count(*) AS Total
FROM [On time performace audits]  
WHERE DATE Between StartDate And EndDate
GROUP BY [Route #]
UNION ALL
SELECT 'Late', [Route #], Count(*)
FROM [On time performace audits] 
WHERE DATE Between StartDate And [EndDate AND 
(Minute( [ACTUAL TIME]- [SCHEDULED TIME]) >=6) 
GROUP BY [Route #];
0 голосов
/ 28 сентября 2010

Во втором примере запроса вы уверены, что хотите использовать функцию Minute ()?

Если вам нужна длительность между 2 значениями даты / времени, используйте функцию DateDiff ().

Debug.Print DateDiff("n", #2010/09/27 01:00#, #2010/09/27 02:10#)
70

Debug.Print Minute(#2010/09/27 02:10# - #2010/09/27 01:00#)
10

Если вам нужен подход DateDiff (), попробуйте следующее:

PARAMETERS StartDate DateTime, EndDate DateTime;
SELECT t.[ROUTE #], t.Total, l.Late
FROM
    (SELECT [ROUTE #], Count(*) AS Total
    FROM [On time performace audits]
    WHERE ((([DATE]) Between [StartDate] And [EndDate]))
    GROUP BY [ROUTE #]) AS t
    LEFT JOIN (
        SELECT [ROUTE #], Count(*) AS Late
        FROM [On time performace audits]
        WHERE ((([DATE]) Between [StartDate] And [EndDate]))
            And DateDiff("n",[SCHEDULED TIME],[ACTUAL TIME]) >= 6
        GROUP BY [ROUTE #]
        ) AS l
    ON t.[ROUTE #] = l.[ROUTE #];

Примечание. Я заключил имя поля DATE в квадратные скобки, чтобы отличить его от функции Date () VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...