Как присоединиться к таблице с другим условием WHERE после того, как вы уже использовали соединение - PullRequest
0 голосов
/ 08 апреля 2019

Привет, у меня есть 2 таблицы сотрудников и медицинские отпуска, связанные с помощью идентификатора сотрудника, в основном я хочу создать результирующий набор, в котором есть один столбец, который фильтрует по месяцам и годам, и другой столбец, который фильтрует только по годам

       EMPLOYEES                  MEDICAL
    |employee|ID|             |ID|DateOfLeave|
         A     1                1   2019/1/3
         B     2                1   2019/4/15
         C     3                2   2019/5/16
         D     4


    select employees.employee,Employees.ID,count(medical.dateofleave) as 
    NumberofLeaves
    from employees 
    left outer join Medical on employees.emp = MedBillInfo.emp
    and month(medbillinfo.date) in(1) and year(medbillinfo.date) in (2019)
    group by Employees.employee,employees.ID




           RESULT SET
    |Employee|ID|NumberOfLeaves|YearlyLeaves|--i want to join this column
        A      1      1              2
        B      2      0              1
        C      3      0              0
        D      4      0              0

Но я понятия не имею, как написать в текущем выражении sql, чтобы присоединить столбец с ежегодными листьями к моему текущему набору результатов, который содержит только employee, id и numberofleaves

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я думаю, вы хотите условное агрегирование:

select e.employee, e.ID,
       count(*) as num_leaves,
       sum(case when month(m.date) = 1 then 1 else 0 end) as num_leaves_in_month_1
from employees e left join
     Medical m
     on e.emp = m.emp
where m.date >= '2019-01-01' and m.date < '2020-01-01'
group by e.employee, e.ID;

Примечания:

  • Это удаляет предложение where, которое, по-видимому, ссылается на несуществующий псевдоним таблицы.
  • Арифметика даты использует прямые сравнения, а не функции.
  • Здесь вводятся псевдонимы таблиц, поэтому вопрос легче писать и читать.
0 голосов
/ 08 апреля 2019

Ваш вопрос, вероятно, необходимо исправить, поскольку группа по условию не совпадает с выбранными столбцами. Но, исходя из того, что вы спросили, я думаю, вам нужно использовать функцию даты усечения, чтобы сгруппировать листья по годам. Для SQL Server есть функция YEAR (дата), которая возвращает год указанной даты. Эта дата будет MEDICAL.DateOfLeave в вашем случае.

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