Работать с этими запросами немного неудобно, поскольку у вас есть выходные дни, которые хранятся в разных столбцах.Лучшим вариантом было бы иметь что-то вроде
EMPLOYEE_ID DAY_OFF
Тогда у вас было бы несколько рядов, если бы сотрудник взял несколько выходных
EMPLOYEE_ID DAY_OFF
1 10/21/2009
1 12/6/2009
2 09/3/2009
2 12/6/2009
3 09/3/2009
...
В этом случае вы могли бы узнать, скольковыходные дни каждый человек взял, используя следующий запрос:
SELECT EMPLOYEE_ID, COUNT(*) AS NUM_DAYS_OFF FROM DAYS_OFF_TABLE GROUP BY EMPLOYEE_ID
И количество людей, которые взяли выходные дни на каждую дату, например:
SELECT DAY_OFF, COUNT(*) AS NUM_PEOPLE FROM DAYS_OFF_TABLE GROUP BY DAY_OFF
Но я отвлекся ...
Вы можете попытаться использовать оператор SQL CASE , чтобы помочь с этим:
SELECT Employee, CASE
WHEN First_Day_Off is NULL AND Second_Day_Off is NULL THEN 0
WHEN First_Day_Off is NOT NULL AND Second_Day_Off is NULL THEN 1
WHEN First_Day_Off is NULL AND Second_Day_Off is NOT NULL THEN 1
ELSE 2
END AS NUM_DAYS_OFF
FROM DAYS_OFF_TABLE
(обратите внимание, что вам может потребоваться немного изменить синтаксис в зависимости от вашегобаза данных.
Получение даты и количества людей, которые взлетели в этот день, может быть более сложным.
Я не знаю, сработает ли это, но вы можете попробовать это:
SELECT
Date_Off,
COUNT(*) AS Num_People
FROM
(SELECT
First_Day_Off, COUNT(*) AS Num_People FROM DAYS_OFF_TABLE WHERE First_Day_Off IS NOT NULL GROUP BY First_Day_Off
UNION
SELECT Second_Day_Off, COUNT(*) AS Num_People FROM DAYS_OFF_TABLE WHERE Second_Day_Off IS NOT NULL GROUP BY Second_Day_Off)
GROUP BY
Num_People