Проблема с доступом: не получается получить требуемые выходные данные при построении отчета

#sql #select #ms-access-2007

#sql #выберите #ms-access-2007

Вопрос:

Я создал отчет в Access и написал запрос для извлечения записей из нескольких таблиц следующим образом:

 SELECT BuildingDetails.*, Contractors.Item, ActionDetails.ActionType
FROM Contractors 
INNER JOIN (BuildingDetails 
    INNER JOIN (ActionDetails 
        INNER JOIN DormData ON ActionDetails.ActionID = DormData.ActionID) 
    ON BuildingDetails.BuildingID = DormData.BuildingID) 
ON Contractors.ID = DormData.ItemID;
  

Теперь я хочу, чтобы запрос извлекал только actiontype=repair или actionid=1 . У нас есть два actontype «ремонта» и «замены».

Ответ №1:

Я немного переформатировал ваш запрос, чтобы привести его в порядок. Вы не указали, как выглядят данные для фильтра, но, основываясь на том, что вы сказали, я бы выбрал что-то вроде следующего

 SELECT BuildingDetails.*, 
Contractors.Item, 
ActionDetails.ActionType 
FROM Contractors 
INNER JOIN DormData ON Contractors.ID = DormData.ItemID
INNER JOIN ActionDetails ON DormData.ActionID = ActionDetails.ActionID
INNER JOIN BuildingDetails ON DormData.BuildingID = BuildingDetails.BuildingID
WHERE ActionDetails.ActionType = 'Repair' OR ActionID=1
  

Если ActionID является столбцом подстановки, который связывает ActionID(1) с ActionType (‘Repair’), то вам не нужно или и вы можете придерживаться одного или другого условия в предложении WHERE.

Надеюсь, это поможет.

Комментарии:

1. привет, Дэвид, у меня другая проблема в проекте access.

2. я создал форму, в которой есть несколько полей со списком. на основе этих выбранных я должен выполнить поиск в своей базе данных и показать ей лист Excel. я совершенно запутался, как я могу это сделать? пожалуйста, помогите

Ответ №2:

Я подозреваю, что вам нужно фильтровать только с помощью actiontype = 'repair' (я также предполагаю, что ActionID это автоматический номер, и у вас есть строка {ActionID = 1, actiontype = 'repair'} только случайно… но, возможно, это слишком далеко экстраполирует 🙂

Я удивлен, что ответ @ David Steele работает в Access (ACE, Jet, что угодно), потому что он удалил круглые скобки из JOIN предложений (однако, если это так — предлагая связанную таблицу — тогда вы должны «принять» этот ответ). Но я тоже мог бы удержаться от «приведения их в порядок», чтобы ON предложения были близки к именам таблиц:

 SELECT BuildingDetails.*, Contractors.Item, ActionDetails.ActionType
  FROM ((DormData 
         INNER JOIN Contractors 
            ON Contractors.ID = DormData.ItemID)
         INNER JOIN BuildingDetails 
            ON BuildingDetails.BuildingID = DormData.BuildingID)
         INNER JOIN ActionDetails
            ON ActionDetails.ActionID = DormData.ActionID
 WHERE ActionDetails.ActionType = 'repair';
  

Ответ №3:

Добавьте это в конец инструкции select, чтобы устранить проблему:

 where actiondetails.actiontype = 'repair' or actiondetails.actionid = 1
  

Комментарии:

1. предоставьте, можете ли вы дать мне свой идентификатор электронной почты