MS Access Query, критерии для отображения всех записей - PullRequest
0 голосов
/ 05 февраля 2019


Я использую запрос мастера MS Access 2010 для фильтрации таблицы.

Что я хочу получить в результате - это таблица, которая возвращает базу данных по:
- текущей дате недели
- Пользователь, который над ней работает (пользователи: AAA, BBB, DDD в следующей таблице).

Пример таблицы выглядит следующим образом:

Monday | Tuesday
AAA    | BBB 
AAA    | BBB 
DDD    | AAA
DDD    | AAA

Результаты, которые я хочу получить, были бы

Если сегодня понедельник, мне нужны данные для AAA

Monday | Tuesday
AAA    | BBB 
AAA    | BBB 

Если сегодня вторник, мне нужны данные для AAA

Monday | Tuesday
DDD    | AAA
DDD    | AAA

Моя идея пока:

В поле критерия я поставил условие:

IIf([TempVars]![WorkingDay]=2,[TempVars]![WorkingUser],*)

Насколько я понимаю:
-> если сегодня второй день (вторник), тогда покажите данные для AAA, в противном случае (этоне вторник) показать все.

Я проверил TempVars (рассчитывается при открытии базы доступа), и они верны и равны:
[TempVars]! [WorkingDay] = 2
[TempVars]! [WorkingUser] = AAA

Это на самом деле работает -> Я вижу записи для AAA, однако если сегодня не вторник (TempVar = 1), я хотел бы видеть все записи (компилятор должен перейти в falseутверждение, которое "*", но я на самом деле не вижу никаких записей ... Компилятор переходит в ложное утверждение, и если я вручную вставлю "BBB", я получу BBB, но я неЯ не знаю, что мне следует вводить, поэтому я получаю все данные.


Я не уверен, что не так с этим утверждением, я попытался вместо "*" поставить:
- Like ("*")
- Like "*"
- (Не ноль) Или (NULL)

В Access это выглядит так:
Экраниз Access
SQL-код, сгенерированный Access:

SELECT
t001.Monday, t001.Tuesday
FROM
 Tbl_001_WholeBase AS t001
WHERE
 (((t001.Monday)=IIf([tempvars]![WorkingDay]=1,[tempvars]![WorkingUser],"*")) AND ((t001.Tuesday)=IIf([tempvars]![WorkingDay]=2,[tempvars]![WorkingUser],"*")));


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

1 Ответ

0 голосов
/ 05 февраля 2019

Вам следует подумать о нормализации ваших данных таким образом, чтобы день недели отображался в поле Weekday, а не в отдельном поле для каждого дня недели.

Тем не менее в следующем запросе используется *Функция 1004 * для получения желаемого результата:

select
    t001.Monday, t001.Tuesday
from
    tbl_001_wholebase t001
where
    choose
    (
        [tempvars]![WorkingDay],
        t001.Monday  = [tempvars]![WorkingUser],
        t001.Tuesday = [tempvars]![WorkingUser]
    )

В качестве альтернативы, используя логические операторы:

select
    t001.Monday, t001.Tuesday
from
    tbl_001_wholebase t001
where
    ([tempvars]![WorkingDay] = 1 and t001.Monday  = [tempvars]![WorkingUser]) or
    ([tempvars]![WorkingDay] = 2 and t001.Tuesday = [tempvars]![WorkingUser])

Причина, по которой вашему запросу не удается получить желаемые результаты, заключается в том, что *Подстановочный знак следует использовать вместе с оператором like, а не с оператором =.

...