1

次の列を持つ 1 つのテーブル per_all_peopl_f があります。

name  person_id  emp_flag  effective_start_date   effective_end_date   DOJ
--------------------------------------------------------------------------------    
ABC   123          Y       30-MAR-2011              30-MAR-2013       10-FEB-2011
ABC   123          Y       24-FEB-2011              27-FEB-2011       10-FEB-2011
DEF   345          N       10-APR-2012              30-DEC-4712       15-SEP-2011

データが繰り返され、有効開始日が異なる多数のエントリ (1000 以上) があります。

従業員の人数を計算する必要があります。つまり、四半期ごとに会社を辞める従業員の数です。

次の列をフェッチする必要があります。

  1. 2012 年 (第 1 四半期) の人員数
  2. 2013 年 (第 1 四半期) の人員数
  3. 2 つの人数の違い
  4. % 違い

四半期ごとの人数を見つけるために使用したクエリは次のとおりです。

関数 1:

CREATE OR REPLACE FUNCTION function_name
  (l_end_date ,l_start_date  ) 
  RETURN number;
  IS 
    l_emp

  BEGIN
    select count(distinct papf.person_id)
      into l_emp
      from per_all_people_f papf
     where papf.emp_flag ='Y'
       and effective_start_date >=l_end_date
       and effective_end_date <=l_start_date ;

    return l_emp; 
END function_name;

メインパッケージ:

create xx_pack_name  body
is 
    cursor cur_var
    is 
       select function_name('01-MAR-2012','31-MAY-2012') EMP_2012,
              function_name('01-MAR-2013','31-MAY-2013') EMP_2013,
              function_name('01-MAR-2012','31-MAY-2012')-function_name('01-MAR-2013','31-MAY-2013') Diff
         from dual;

end xx_pack_name  ;

これは費用対効果が高いですか?

4

1 に答える 1