Найти все комбинации дня и месяца, используя SQL - PullRequest
0 голосов
/ 27 октября 2018

Я хочу узнать общее количество дней рождения сотрудников за каждый день в году.

Я использовал следующий запрос для получения результата:

Select S.birthday_month,S.birthday_day,COUNT(id) AS 'No of Birthdays'
            FROM Students S
            GROUP BY S.birthday_month,S.birthday_day
            ORDER BY S.birthday_month,S.birthday_day

Результат

 birthday_month    birthday_day      No of Birthdays
    April            16                 2
    May               1                  1
    June              5                  1
    September         22                 1

То, что я на самом деле хотел бы, - это всевозможная комбинация месяца и дня и положить значение 0 в Количество дней рождения , если оно не существует.

Вот мой желаемый вывод

   birthday_month    birthday_day      No of Birthdays
    Jan                  1                0
    Jan                  2                0
    Jan                  3                0
                  etc
                  etc
    April              16                 2
    May                1                  1
    June               5                  1
    September          22                 1
                  etc
                  etc
    Dec                30                 0
    Dec                31                 0

1 Ответ

0 голосов
/ 27 октября 2018

Решение left join.,,но вам нужен список дней.Один метод состоит в том, чтобы генерировать даты и вырезать год:

with dates as (
      select cast('2000-01-01' as date) as dte, datename(month, '2000-01-01') as mon, 1 as day, 1 as lev
      union all
      select dateadd(day, 1, dte), datename(month, dateadd(day, 1, dte)), day(dateadd(day, 1, dte)) lev + 1
      from dates
      where dte < '2000-12-31'
     )
select d.mon, d.day, count(s.birthday_month)
from dates d left join
     students s
     on s.birthday_month = d.mon and s.birthday_day = d.day
group by d.mon, d.day
order by d.lev
option (maxrecursion 0);
...