Сводный вопрос SQL Count, объединяющий 3 таблицы - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь объединить 3 таблицы, чтобы включить только тех сотрудников, которым назначено более одного назначения.Благодаря устранению неполадок я обнаружил, что мой запрос работает, пока я не добавлю свою третью таблицу.В частности, пока я не добавлю столбцы третьей таблицы в группу по.Мне нужно добавить третью таблицу, так как она включает дату начала и окончания проектов.

Я занимаюсь этим уже несколько дней.Я попытался обойти string_agg, используя столбцы из третьей таблицы в группе, но обнаружил, что он не поддерживается в программе, которую мы должны использовать.Я пробовал разные объединения, разные подсчеты, используя переменные.Я попытался объединить таблицы в различных комбинациях и впоследствии работал с другими ошибками.Я пытался сделать вложенные операторы select.

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

CREATE VIEW Assignments AS

    SELECT a.EmpIDNumber,
           COUNT(*) AS Frequency,
           e.FirstName,
           e.LastName,
           a.PositionOnProject,
           P.AssignedToProject AS ProjectName,
           P.ProjectBeginDate AS StartDate,
           P.FinishOnProject AS End_Date
    FROM Assignments a
         INNER JOIN Employees e ON a.EmpIDNumber = e.EmpIDNumber
         INNER JOIN Projects p ON a.projectID = p.ProjectID
    GROUP BY e.FirstName,
             E.LastName,
             a.PositionOnProject,
             a.EmpIDNumber,
             p.AssignedToProject,
             p.ProjectBeginDate,
             p.FinishOnProject
    HAVING COUNT(*) > 1;

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

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

1 Ответ

1 голос
/ 13 мая 2019

Если вы хотите, чтобы сведения о проекте для сотрудников были назначены более чем одному проекту, используйте функции окна:

SELECT a.EmpIDNumber, a.Frequency,
       e.FirstName, e.LastName, a.PositionOnProject,
       P.AssignedToProject AS ProjectName,
       P.ProjectBeginDate AS StartDate,
       P.FinishOnProject AS End_Date
FROM (SELECT a.*, COUNT(*) OVER (PARTITION BY a.EmpIDNumber) as frequency
      FROM Assignments a
     ) a INNER JOIN
     Employees e
     ON a.EmpIDNumber = e.EmpIDNumber INNER JOIN
     Projects p
     ON a.projectID = p.ProjectID
WHERE frequency > 1;

Ваша проблема в том, что вы добавили информацию о проекте в GROUP BY. Только один проект будет соответствовать этим условиям, поэтому предложение HAVNG отфильтровывает все.

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