Доступ к запросу базы данных для использования месяца с даты - PullRequest
1 голос
/ 07 августа 2009

У меня есть следующая схема таблицы в acess (2007).

Дата eventDate бит (логическое) обед, Битовые (булевы) закуски, Битовый (булевы) чай,

Мне бы хотелось иметь один запрос, который бы подсчитывал количество лучших блюд, закусок и чая (каждый в виде столбца) за данный месяц (используя дату события).

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

В Access значение True равно -1, а значение False равно 0. Таким образом, вы можете использовать абсолютное значение суммы этих значений, чтобы указать, сколько было True.

SELECT Abs(Sum(lunch)) AS SumofLunch, Abs(Sum(snacks)) AS SumofSnacks, Abs(Sum(Tea)) AS SumofTea
FROM YourTable
WHERE eventDate >= #2009/08/01# And eventDate < #2009/09/01#;
2 голосов
/ 07 августа 2009

Попробуйте:

SELECT SUM(ABS(lunch)) AS lunchCount, SUM(ABS(snacks)) AS snackCount, SUM(ABS(tea)) AS teaCount
FROM <TableName>
WHERE eventDate >= #1/1/2009# AND eventDate < #2/1/2009#
0 голосов
/ 09 августа 2009

Я бы атаковал это при доступе, используя операторы IIF (думайте как операторы CASE в других базах данных). IIF в Access возвращает значение, когда указанное условие истинно (после первой запятой), или другое значение, если оно оценивается как ложное (после второй запятой). Поскольку вы используете логические значения, проверка на истинное состояние и скопление через совокупную сумму помогут вам.

SELECT Month(EventDate) AS TheMonth, Year(EventDate) AS TheYear, 
SUM(IIF(Lunch, 1, 0)) AS LunchCount,
SUM(IIF(Snacks, 1, 0)) AS SnackCount,
SUM(IIF(Tea, 1, 0)) AS TeaCount
FROM YourTable
GROUP BY Month(EventDate), Year(EventDate)
ORDER BY Month(EventDate), Year(EventDate)

Приведенный выше запрос о возвращении курса считается за все месяцы и годы, однако вы можете легко ввести диапазон дат, как показано ниже.

SELECT Month(EventDate) AS TheMonth, Year(EventDate) AS TheYear, 
SUM(IIF(Lunch, 1, 0)) AS LunchCount,
SUM(IIF(Snacks, 1, 0)) AS SnackCount,
SUM(IIF(Tea, 1, 0)) AS TeaCount
FROM YourTable
WHERE EventDate BETWEEN #1/1/2009# AND #1/31/2009#
GROUP BY Month(EventDate), Year(EventDate)
ORDER BY Month(EventDate), Year(EventDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...