MS Access автоматически заполняет столбец запроса на основе даты начала и окончания - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть запрос под названием Records Query, в который я вводю информацию с помощью формы.

У каждой записи есть дата.

В другой таблице у меня есть список диапазонов дат с названием диапазона.Это означает, что первый столбец - это Range name, второй Start date, а третий - End date.

Я хочу, чтобы в последнем столбце Records Query отображалось название диапазона дат, в котором этоконкретный диапазон находится в.

Например, если у меня есть следующие диапазоны дат:

+------------+----------+----------+
| Start date | End date |   Name   |
+------------+----------+----------+
| Jan 1      | Jan 10   | session1 |
| Jan 11     | Jan 20   | session2 |
+------------+----------+----------+

Если дата этой записи в Records Query равна 2 января, значение столбца Session автоматически должно быть session1

Если кто-то может помочь, это будет с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете присоединиться с помощью простого предложения Where:

Select
     [Records Query].*,
     [Date Ranges].[Name] As [Session Name]
From
     [Records Query],
     [Date Ranges]
Where
     [Records Query].[Date] Between [Date Ranges].[Start date] And [Date Ranges].[End date]
0 голосов
/ 14 ноября 2018

Предполагая, что ваши даты хранятся с использованием полей DateTime и что диапазоны дат являются непрерывными (без пробелов), вы можете определить подходящее имя сеанса для вашей даты, используя следующий коррелированный подзапрос:

SELECT q.*,
(
    SELECT TOP 1 r.Name 
    FROM Ranges r 
    WHERE q.MyDate <= r.[End date] ORDER BY r.[End date]
) AS SessionName
FROM [Records Query] q

Здесь я предполагаю, что ваши диапазоны дат хранятся в таблице с именем Ranges, а поле даты в вашем запросе Records Query называется MyDate (измените его в соответствии с вашими данными).

ВВ приведенном выше примере, я предполагаю, что у вас есть следующие настройки:

Диапазоны

Ranges

Запрос записей

Records Query

SQL

SQL

Результат

Result

К сожалению, вы не можете просто внедрить этот подзапрос в запрос UPDATE -

UPDATE [Records Query] q
SET q.Session = 
(
    SELECT TOP 1 r.Name 
    FROM Ranges r 
    WHERE q.MyDate <= r.[End date] ORDER BY r.[End date]
)

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

Таким образом, вам, вероятно, потребуется вывести имена сеансов и первичный ключ из вашего Records Query запрос к локальной таблице, которая затем может быть использована для обновления вашего запроса - другие, возможно, найдут более элегантный способ избежать этого.

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