2016-07-25 4 views
0

У меня есть таблица employees с колонкой hire_date, и запрос, который я пытаюсь сделать, - подсчитать, сколько сотрудников было нанято в 1995 и 1996 годах. Где 1995 год имеет свою собственную колонку и 1996 год имеет свою собственную колонку:SQL - подсчет строк на основе 2 ограничений

______________ 
|  |  | 
| 1995 | 1996 | 
|______|______| 
| 2 | 3 | 
|______|______|` 

псевдокод:

display COUNT of rows WHERE hire_date LIKE '%95', display COUNT of rows WHERE hire_date LIKE '%96' 

можно ли вести меня о том, как я могу добиться этого?

ответ

1

С помощью этого запроса вы получаете доступ только один раз в таблице сотрудников

select 
    sum(case TO_CHAR(hire_date, 'YYYY') when '1995' then 1 end) as "1995", 
    sum(case TO_CHAR(hire_date, 'YYYY') when '1996' then 1 end) as "1996" 
    from employees 
where hire_date between date '1995-01-01' and date'1996-12-31'; 
+0

Мне нравится этот метод, но преобразования to_char будет необходимо сделать на 'hire_date' для сравнения:' TO_CHAR (hire_date, «YYYY») ' – ethane

+0

@Ethan Я обновил ответ в случае, если Hire_date является датой. – vercelli

+0

Обратите внимание, что 'date'1996-12-31'' оценивается в 0:00 утра, поэтому не включает остальную часть последнего дня - так что этот код предполагает, что' lease_date' всегда установлен в 0:00 утра для тех счастливчиков, которые наняты 31 декабря. –

0
SELECT (SELECT COUNT(*) FROM employees WHERE hire_date = '1995') "1995", 
     (SELECT COUNT(*) FROM employees WHERE hire_date = '1996') "1996" 
FROM dual; 
Смежные вопросы