私は単純なテーブルの従業員ID、開始年、終了年を持っています。私は、どの年に何人の従業員が仕事をしているのかを知る必要があります。 min yearが2000とmaxの場合2000年から2017年までのすべての年を労働者数でリストアップする必要があります毎年何人の従業員が働いていますか?
答えて
ここにはその方法がありますが、他にももっと良い方法があります。
with MA_MITARBEITER_TH (user_id, grp_type, sap_valid_from, sap_valid_to) as
(
select 107, 'NOT_ACTIVE', to_date('23-09-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 107, 'NOT_ACTIVE', to_date('01-01-2012','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 107, 'NOT_ACTIVE', to_date('23-09-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 107, 'ACTIVE', to_date('01-07-2007','dd-mm-yyyy'), to_date('31-08-2007','dd-mm-yyyy') from dual union all
select 107, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('30-06-2007','dd-mm-yyyy') from dual union all
select 107, 'NOT_ACTIVE', to_date('01-01-2012','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 107, 'ACTIVE', to_date('01-09-2007','dd-mm-yyyy'), to_date('31-12-2011','dd-mm-yyyy') from dual union all
select 107, 'ACTIVE', to_date('01-04-2006','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 107, 'ACTIVE', to_date('01-09-2007','dd-mm-yyyy'), to_date('22-09-2011','dd-mm-yyyy') from dual union all
select 106, 'NOT_ACTIVE', to_date('01-02-2007','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 106, 'NOT_ACTIVE', to_date('01-02-2007','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 106, 'ACTIVE', to_date('15-05-2006','dd-mm-yyyy'), to_date('31-01-2007','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-01-2013','dd-mm-yyyy'), to_date('31-05-2013','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-10-2013','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-01-2014','dd-mm-yyyy'), to_date('01-12-2014','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-11-2016','dd-mm-yyyy'), to_date('31-12-2016','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-10-2016','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-03-2017','dd-mm-yyyy'), to_date('31-05-2017','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-01-2017','dd-mm-yyyy'), to_date('28-02-2017','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-06-2017','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('21-09-2006','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2011','dd-mm-yyyy'), to_date('31-12-2012','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-03-2010','dd-mm-yyyy'), to_date('31-12-2012','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2012','dd-mm-yyyy'), to_date('31-12-2012','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-11-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-11-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-11-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-07-2009','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('31-05-2008','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-08-2009','dd-mm-yyyy'), to_date('28-02-2010','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-11-2016','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-10-2016','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2017','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2014','dd-mm-yyyy'), to_date('31-10-2016','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('01-01-2014','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 105, 'ACTIVE', to_date('01-03-2010','dd-mm-yyyy'), to_date('31-12-2012','dd-mm-yyyy') from dual union all
select 105, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-10-2016','dd-mm-yyyy') from dual union all
select 104, 'NOT_ACTIVE', to_date('01-09-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 104, 'NOT_ACTIVE', to_date('01-09-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-10-2010','dd-mm-yyyy'), to_date('31-08-2011','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-12-2009','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('31-05-2008','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-01-2010','dd-mm-yyyy'), to_date('30-09-2010','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 104, 'ACTIVE', to_date('10-04-2006','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('20-08-2007','dd-mm-yyyy'), to_date('31-05-2008','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-08-2006','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('30-06-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-08-2007','dd-mm-yyyy'), to_date('19-08-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-07-2007','dd-mm-yyyy'), to_date('31-07-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-05-2013','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('30-09-2013','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-11-2009','dd-mm-yyyy'), to_date('31-05-2013','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('31-12-2014','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-10-2009','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-07-2007','dd-mm-yyyy'), to_date('19-08-2007','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('04-12-2013','dd-mm-yyyy'), to_date('31-12-2014','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('02-12-2016','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('01-01-2017','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'ACTIVE', to_date('03-12-2016','dd-mm-yyyy'), to_date('31-12-2016','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-11-2009','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2012','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-05-2013','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('30-09-2013','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('31-12-2014','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('01-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('02-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('03-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('02-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('04-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('03-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('05-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('04-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('06-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('05-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('06-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('07-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('07-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('08-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('09-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('08-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('09-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('10-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('11-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('10-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('12-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('11-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('13-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('12-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('14-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('13-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('15-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('14-01-2015','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-10-2013','dd-mm-yyyy'), to_date('31-12-2014','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('03-12-2016','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('02-12-2016','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('03-12-2016','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 100, 'NOT_ACTIVE', to_date('04-12-2013','dd-mm-yyyy'), to_date('02-12-2016','dd-mm-yyyy') from dual union all
select 103, 'NOT_ACTIVE', to_date('01-12-2007','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 103, 'ACTIVE', to_date('23-05-2006','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 103, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('30-11-2007','dd-mm-yyyy') from dual union all
select 103, 'NOT_ACTIVE', to_date('01-12-2007','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-12-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-12-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-12-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-12-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-08-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-01-2012','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-08-2011','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-08-2011','dd-mm-yyyy'), to_date('31-05-2013','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-06-2013','dd-mm-yyyy'), to_date('30-11-2013','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('02-11-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-11-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-01-2015','dd-mm-yyyy'), to_date('13-12-2016','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('14-12-2016','dd-mm-yyyy'), to_date('31-12-2016','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-01-2017','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-05-2007','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-06-2010','dd-mm-yyyy'), to_date('30-09-2010','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-12-2007','dd-mm-yyyy'), to_date('27-05-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-11-2008','dd-mm-yyyy'), to_date('01-11-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('30-06-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-07-2008','dd-mm-yyyy'), to_date('31-10-2008','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('31-10-2007','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-05-2010','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-11-2007','dd-mm-yyyy'), to_date('30-11-2007','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('02-11-2008','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-10-2010','dd-mm-yyyy'), to_date('31-07-2011','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('28-05-2008','dd-mm-yyyy'), to_date('31-05-2008','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('02-12-2014','dd-mm-yyyy'), to_date('13-12-2016','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('14-12-2016','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 102, 'ACTIVE', to_date('01-07-2006','dd-mm-yyyy'), to_date('30-04-2007','dd-mm-yyyy') from dual union all
select 102, 'NOT_ACTIVE', to_date('01-01-2017','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 101, 'NOT_ACTIVE', to_date('01-09-2010','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-04-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('31-03-2009','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-01-2009','dd-mm-yyyy'), to_date('28-02-2009','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('31-12-2008','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-03-2009','dd-mm-yyyy'), to_date('30-06-2009','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-07-2007','dd-mm-yyyy'), to_date('29-02-2008','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('27-05-2008','dd-mm-yyyy'), to_date('31-05-2008','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('27-03-2008','dd-mm-yyyy'), to_date('26-05-2008','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-04-2007','dd-mm-yyyy'), to_date('31-05-2007','dd-mm-yyyy') from dual union all
select 101, 'NOT_ACTIVE', to_date('01-09-2010','dd-mm-yyyy'), to_date('31-12-9999','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-03-2008','dd-mm-yyyy'), to_date('26-03-2008','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-06-2008','dd-mm-yyyy'), to_date('28-02-2009','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('23-10-1992','dd-mm-yyyy'), to_date('31-03-2007','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-06-2007','dd-mm-yyyy'), to_date('30-06-2007','dd-mm-yyyy') from dual union all
select 101, 'ACTIVE', to_date('01-07-2009','dd-mm-yyyy'), to_date('31-08-2010','dd-mm-yyyy') from dual
)
--select * from MA_MITARBEITER_TH;
,
-- uncomment the below line to point to your db
-- ;with
emp (id, hired, fired) as
(
select user_id, to_number(to_char(sap_valid_from, 'yyyy')), to_number(to_char(sap_valid_to,'yyyy'))
from
(
select user_id, min(sap_valid_from) sap_valid_from, max(sap_valid_to) sap_valid_to
from MA_MITARBEITER_TH
where grp_type = 'ACTIVE'
group by user_id
)
)
--select * from emp;
,
-- grouping of hired by year
hy (year, cnt) as
(
select hired, count(hired)
from emp
group by hired
)
,
-- grouping of fired by year
fy (year, cnt) as
(
select fired, count(fired)
from emp
group by fired
)
,
-- put them together with a cte
-- it takes care of years where no HR activity
-- anchor is set to the min hired year.
cte (year, hired, fired, emp_cnt) as
(
select hy.year, nvl(hy.cnt ,0), nvl(fy.cnt,0), hy.cnt - nvl(fy.cnt,0)
from hy
left outer join
fy
on hy.year = fy.year
where hy.year = (select min(year) from hy)
union all
select cte.year+1, nvl(hy.cnt,0), nvl(fy.cnt,0), cte.emp_cnt + nvl(hy.cnt,0) - nvl(fy.cnt,0)
from cte
left outer join
hy
on (cte.year+1 = hy.year)
left outer join
fy
on (cte.year+1 = fy.year)
where cte.year < to_char(sysdate, 'yyyy')
)
select * from cte;
;
私はより多くのダイナミックSQLについて考えていました。上記の例の表とコメントを参照してください。あなたの助けを借りて非常に素晴らしいImとは別に! – HankerPL
NOT_ACTIVEは何を意味しますか?レポートクエリに影響しますか? 2行目と4行目のような重複行がたくさんあります。同じUSER_IDに特定の年の複数のエントリがある場合は、それらを別々のものとして扱うか、追加で同じものとして扱いますか? – Slkrasnodar
この場合、特定のuser_idのエントリのACTIVE GROUPを選択し、VALID_FROMとmaxからminの値を選択するだけで済みます。会社の一部の従業員がどのくらいの期間働いていたか(時間の範囲)を確認するVALID_TOの値さらに、DATE(VALID_FROM、VALID_TO&SYSDATE)からYEARを抽出して、この値を丸めます。この例では、EXTRACT(YEAR FROM SYSDATE)は最大年2017 = maxとして扱われ、9999ではなく最大;) – HankerPL
は、私は今、それが、これは問題のないソリューションであれば、私は文句を言わない、確認してください何だと私は考えているいくつかのクエリを組み合わせる:
with YEARS as ( select (to_char(SAP_VALID_FROM,'YYYY') + level -1) AS YEARS from ( SELECT MIN(SAP_VALIDFROM) AS SAP_VALID_FROM, MAX(SYSDATE) AS SAP_VALID_TO FROM MA_MITARBEITER_TH ) YEARS connect by level < = to_char(SYSDATE,'YYYY') - to_char(SAP_VALID_FROM,'YYYY')+1 ), YEARS_SCOPE AS ( SELECT PERSONALNUMMER, EXTRACT(YEAR FROM (MIN(SAP_VALIDFROM))) AS ARBEIT_BEGINN, CASE WHEN EXTRACT(YEAR FROM (MAX(SAP_VALIDTO)))='9999' THEN EXTRACT(YEAR FROM (MAX(SYSDATE))) ELSE EXTRACT(YEAR FROM (MAX(SAP_VALIDTO))) END AS ARBEIT_SCHLUSS FROM MA_MITARBEITER_TH WHERE TIMEGROUP='AKT' GROUP BY PERSONALNUMMER ) select COUNT(*), YEARS FROM YEARS,YEARS_SCOPE WHERE YEARS BETWEEN ARBEIT_BEGINN AND ARBEIT_SCHLUSS GROUP BY YEARS ORDER BY YEARS;
- 1. xqueryを使用して従業員がいない従業員を探す
- 2. データベース、従業員毎日の記録
- 3. 1年以上働いていると従業員の給料を2ドルで更新する
- 4. Elmasri社の従業員データベース - 別の場所で働いている人を特定する
- 5. 従業員が割り当てられていない従業員を取り出す
- 6. MySQL - 最高の従業員に達するまで従業員の上司を見つけてください
- 7. 「従業員がID列
- 8. 3人のグループに15人の従業員をグループに入れます
- 9. SQL:従業員と顧客はユーザーですが、すべての従業員がユーザーではありません
- 10. すべての従業員とその人数をmysqlで監視します
- 11. デベロッパーのHerokuの従業員
- 12. OFBizの従業員セルフサービス
- 13. SQLデータベースデザインの従業員タイムシート
- 14. 従業員クラスのPython
- 15. 従業員スケジュールのデータベーススキーマ
- 16. 従業員マネージャーレポート - SQL Serverの
- 17. 従業員の給与はタイムシートの出席に基づいており、合計従業員数は
- 18. 私はEMPLOYEE表に従業員の個人情報を更新するストアドプロシージャを作成するために次のことを行っている従業員
- 19. 従業員テーブルの上司である従業員を表示するSQLクエリ
- 20. 地区および従業員の従業員数をカウントするクエリ
- 21. Excel - 従業員数1人当たりの勤務日数
- 22. 従業員の年齢と年数を正確に調べる方法
- 23. は私のマネージャーのリストを取得する私は、従業員のレポートを組織内の従業員のリストを与え、社員、ReportsToEmployeeId列、と従業員のテーブルを持っている私の従業員ID
- 24. 従業員テーブルの複数のエントリを含む従業員テーブルの各従業員の2番目に高い給料を得る方法
- 25. プロジェクト番号、プロジェクト名、およびすべてのプロジェクトの従業員数のリスト>作業中の従業員2人
- 26. 以下は従業員
- 27. 初めてのユーザー(従業員)アカウント
- 28. 使用してCrystalレポートの従業員
- 29. 年齢によって従業員の最高給与を表示するクエリ
- 30. 各組織の従業員をカウントするスパークコードの何が間違っていますか?
あなたがサンプルテーブルを含めたりしていただけませんあなたスキーマのように見える必要はありません。 – Manngo
したがって、2000年の従業員数とその年の従業員数を含む1行の2001年の1行が必要ですか?あなたはすべての年番号を含むテーブルを持っていますか? –
[サンプルテーブルへのリンク](https://drive.google.com/file/d/0B2z2BF4fbWh8aE1tMldQNG5CVDA/view?usp=sharing) – HankerPL