次の列を持つ 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 以上) があります。
従業員の人数を計算する必要があります。つまり、四半期ごとに会社を辞める従業員の数です。
次の列をフェッチする必要があります。
- 2012 年 (第 1 四半期) の人員数
- 2013 年 (第 1 四半期) の人員数
- 2 つの人数の違い
- % 違い
四半期ごとの人数を見つけるために使用したクエリは次のとおりです。
関数 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 ;
これは費用対効果が高いですか?