Доступ Супер Застрял со столами - PullRequest
0 голосов
/ 02 мая 2018

Я пытался объединить две таблицы и не могу сделать это. Попытка добавить Количество сотрудников в другую таблицу. enter image description here enter image description here

SELECT [Training History].JobID,(
       SELECT Job.Department 
       FROM Job 
       WHERE [Training History].JobID = Job.JobID) 
       AS Department, 
SUM([Expenditure]) AS ExpenditureOfJob 
     FROM [Training History] 
     GROUP BY [Training History].JobID,
(SELECT COUNT (*) AS [Number of Employees] 
     FROM Employee 
     GROUP BY JobID)
;

Также пробовал с;

(SELECT COUNT (*) AS [Number of Employees] 
     FROM Employee 
    WHERE [Training History].JobID = Employee.JobID
 GROUP BY JobID)

говорит, что в последнем бите есть синтаксическая ошибка, но я не могу ее найти.

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Я верю, что то, что сказал Ашлидог, правда. Однако, поскольку вы используете MS Access, этот тип строки SQL, скорее всего, будет работать неправильно.

Насколько мне известно, ни одна версия MS Access не поддерживает SQL в этом контексте. (Хотя я могу ошибаться в этом)

Если то, что было упомянуто не сработало, попробуйте это:

SELECT * 
FROM [Training History]
INNER JOIN Employee ON Employee.JobID = [Training History].JobID

EDIT:

Для простоты (это в режиме конструктора запроса [вкладка «Дизайн»):

enter image description here

0 голосов
/ 02 мая 2018

Поскольку вы выполняете различные агрегированные запросы группового уровня (сначала по JobID и Department , а затем только по JobID ), рассмотрите возможность объединения их как производных таблицы (т. е. вложенные подзапросы в предложениях FROM или JOIN):

SELECT agg1.JobID, agg1.Department, agg1.ExpenditureOfJob, agg2.[Number of Employees]
FROM
  (SELECT t.JobID, j.Department, SUM([Expenditure]) AS ExpenditureOfJob 
   FROM [Training History] t
   INNER JOIN Job j ON t.JobID = j.JobID
   GROUP BY t.JobID, j.Department) As agg1

   INNER JOIN
  (SELECT t.JobID, Count(*) AS [Number of Employees]
   FROM [Training History] t
   GROUP BY t.JobID) As agg2

ON agg1.JobID = agg2.JobID

Или присоединитесь к уже сохраненным запросам:

SELECT agg1.*, agg2.[Number of Employees]
FROM
  mySavedQueryAgg1 as agg1

INNER JOIN
  mySavedQueryAgg2 as agg2

ON agg1.JobID = agg2.JobID
0 голосов
/ 02 мая 2018

Все, что вам нужно, это простой JOIN. ( Подробнее здесь )

Чтобы объединить данные в таблицах примеров на основе JobID:

SELECT
  [Training History].*,
  JobID.*
FROM
  [Training History] left **inner join** JobID
  ON [Training History].JobID = Job.JobID

Это самая простая форма объединения; Вы можете сделать гораздо больше, и это, вероятно, будет лучше соответствовать вашим реальным данным и потребностям. Google "Объединение таблиц в Access".

Кроме того, конструктор запросов Access значительно облегчает выполнение подобных задач, поскольку он «пишет» SQL для вас.

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