количество сотрудников по годам - PullRequest
2 голосов
/ 16 марта 2019

У меня есть требование подсчитывать количество сотрудников по годам, даже если в этом году ни один сотрудник не присоединился: например,

emp_id start_dt term dt 
----------
1      1/1/2010  
----------
2      1/1/2011 12/31/2011
----------
3      1/1/2013
----------
4      1/1/2015 12/31/2016
----------
5      1/1/2016 
----------

мне нужно печатать ни одного сотрудника за каждый год, начиная с первого появления sysdate, то есть

2010 1
----------
2011 2
----------
2012 1
----------
2013 2
----------
2014 2
----------
2015 3
----------
2016 4
----------
2017 3
----------
2018 3
----------
2019 3

Ответы [ 2 ]

2 голосов
/ 16 марта 2019

Один из подходов состоит в том, чтобы начать со стола, который имеет все годы заботы.Затем вы можете подсчитать количество активных сотрудников в этом году.

Например,

select y.year,
       (select count(*)
        from t
        where year(t.startdt) <= y.year and
              (year(t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year union all
      select 2012 as year union all
      . . .  -- continue for the years of interest
     ) y;

При этом используется функция year(), которая не является стандартной, но доступна во многих базах данных.Официальная функция: extract(year from startdt).

. В Oracle вы можете выразить это как:

select y.year,
       (select count(*)
        from t
        where extract(year from t.startdt) <= y.year and
              (extract(year from t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year from dual union all
      select 2012 as year from dual union all
      . . .  -- continue for the years of interest
     ) y;
0 голосов
/ 18 марта 2019

это будет работать:

select  EXTRACT(YEAR FROM HIREDATE),count(*) from scott.emp group by EXTRACT(YEAR FROM 
HIREDATE);

для вашего запроса по делу будет:

select  EXTRACT(YEAR FROM START_DT ),count(*) from tablename group by EXTRACT(YEAR FROM 
START_DT );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...