Hi all,
I want to use recursive for count number of employee in each organization. I write code something like this.
with EmpCTE as ( select RootID = D.ORG_CD , D. ORG_CD, D .ParentOID from (SELECT CURRENT_LEAF as ORG_CD , D .DATE_KEY AS DateKey, CASE WHEN LEAF_LEVEL = 1 THEN LEVEL0 WHEN LEAF_LEVEL = 2 THEN LEVEL1 WHEN LEAF_LEVEL = 3 THEN LEVEL2 WHEN LEAF_LEVEL = 4 THEN LEVEL3 WHEN LEAF_LEVEL = 5 THEN LEVEL4 WHEN LEAF_LEVEL = 6 THEN LEVEL5 END AS ParentOID FROM [BISIPH_HR]. [dbo].[ORG_HIER_STD] H , MST_DATE_DIM D where 1= 1 and D. DATE_KEY between BEGDA and ENDDA and D. DATE_KEY between C_L1_BEGDA_KEY and C_L1_ENDDA_KEY and D. DATE_KEY between C_L2_BEGDA_KEY and C_L2_ENDDA_KEY and D. DATE_KEY between C_L3_BEGDA_KEY and C_L3_ENDDA_KEY and D. DATE_KEY between C_L4_BEGDA_KEY and C_L4_ENDDA_KEY and D. DATE_KEY between C_L5_BEGDA_KEY and C_L5_ENDDA_KEY and D. DATE_KEY between C_L6_BEGDA_KEY and C_L6_ENDDA_KEY and D. DATE_KEY between C_L7_BEGDA_KEY and C_L7_ENDDA_KEY ) D where 1= 1 AND DateKey = 20140101 union all select EmpCTE. RootID, D .ORG_CD, D.ParentOID from ( SELECT CURRENT_LEAF as ORG_CD, D .DATE_KEY AS DateKey, CASE WHEN LEAF_LEVEL = 1 THEN LEVEL0 WHEN LEAF_LEVEL = 2 THEN LEVEL1 WHEN LEAF_LEVEL = 3 THEN LEVEL2 WHEN LEAF_LEVEL = 4 THEN LEVEL3 WHEN LEAF_LEVEL = 5 THEN LEVEL4 WHEN LEAF_LEVEL = 6 THEN LEVEL5 END AS ParentOID FROM [BISIPH_HR]. [dbo].[ORG_HIER_STD] H , MST_DATE_DIM D where 1= 1 and D. DATE_KEY between BEGDA and ENDDA and D. DATE_KEY between C_L1_BEGDA_KEY and C_L1_ENDDA_KEY and D. DATE_KEY between C_L2_BEGDA_KEY and C_L2_ENDDA_KEY and D. DATE_KEY between C_L3_BEGDA_KEY and C_L3_ENDDA_KEY and D. DATE_KEY between C_L4_BEGDA_KEY and C_L4_ENDDA_KEY and D. DATE_KEY between C_L5_BEGDA_KEY and C_L5_ENDDA_KEY and D. DATE_KEY between C_L6_BEGDA_KEY and C_L6_ENDDA_KEY and D. DATE_KEY between C_L7_BEGDA_KEY and C_L7_ENDDA_KEY ) D inner join EmpCTE on D .ParentOID = EmpCTE.ORG_CD AND D. DateKey = 20140101 ) select distinct ORG_DIM.ORG_CD , ORG_DIM. ORG_DESC_T , EmpCTE. ParentOID --, EMP_DIM.EMP_CODE , cnt. Child , cntemp. ChildEmp from MST_EMP_DIM EMP_DIM INNER JOIN TXT_EMP_ORG_FACT EMP_ORG_FACT ON EMP_ORG_FACT .EMP_KEY = EMP_DIM.EMP_KEY INNER JOIN MST_ORG_DIM ORG_DIM ON ORG_DIM .ORG_CD = EMP_ORG_FACT.ORG_CD INNER JOIN EmpCTE ON EmpCTE .ORG_CD = ORG_DIM.ORG_CD INNER JOIN TXT_EMPLOYMENT_FACT EMPLOYMENT_FACT ON EMPLOYMENT_FACT.EMP_CODE_KEY = EMP_ORG_FACT.EMP_CODE_KEY INNER JOIN ( SELECT ORG_CD = RootID, Child = COUNT (*) FROM EmpCTE GROUP BY RootID ) cnt ON cnt.ORG_CD = EMP_ORG_FACT. ORG_CD ------------------ ¹Ñº¨Ó¹Ç¹ ORG ·ÕèÍÂÙèãµé ORG »Ñ¨¨ØºÑ¹ INNER JOIN ( SELECT ORG_CD = RootID, ChildEmp = Count (*) FROM EmpCTE INNER JOIN TXT_EMP_ORG_FACT EMP_ORG_FACT ON EmpCTE .ORG_CD = EMP_ORG_FACT.ORG_CD INNER JOIN MST_EMP_DIM EMP_DIM ON EMP_ORG_FACT .EMP_KEY = EMP_DIM.EMP_KEY INNER JOIN TXT_EMPLOYMENT_FACT EMPLOYMENT_FACT ON EMPLOYMENT_FACT.EMP_CODE_KEY = EMP_ORG_FACT.EMP_CODE_KEY WHERE 1= 1 AND 20140228 BETWEEN EMP_ORG_FACT.ORG_ASSIGN_START_DT_KEY AND ORG_ASSIGN_END_DT_KEY AND 20140228 BETWEEN EMP_DIM.EMP_START_DATE_KEY AND EMP_DIM.EMP_END_DATE_KEY AND 20140228 BETWEEN EMPLOYMENT_FACT.START_DATE_KEY AND EMPLOYMENT_FACT.END_DATE_KEY AND EMP_ORG_FACT. EMP_ASSIGN_PAYROLL_AREA_CD IN ('Z1', 'Z2') AND EMPLOYMENT_FACT. EMPLOYMENT_STATUS_KEY = 3 GROUP BY RootID ) cntemp ON cntemp.ORG_CD = EMP_ORG_FACT. ORG_CD WHERE 1= 1 AND 20140228 BETWEEN EMP_ORG_FACT.ORG_ASSIGN_START_DT_KEY AND ORG_ASSIGN_END_DT_KEY AND 20140228 BETWEEN EMP_DIM.EMP_START_DATE_KEY AND EMP_DIM.EMP_END_DATE_KEY AND 20140228 BETWEEN EMPLOYMENT_FACT.START_DATE_KEY AND EMPLOYMENT_FACT.END_DATE_KEY AND EMP_ORG_FACT. EMP_ASSIGN_PAYROLL_AREA_CD IN ('Z1', 'Z2') AND EMPLOYMENT_FACT. EMPLOYMENT_STATUS_KEY = 3 ORDER BY EmpCTE.ParentOID
and result
I want to create ChildEmp object for display in web-i report. How can i use recursive in Information Design Tools? or Do you have other solution for this?
Thank you for your advise.
Notto Zung