2021.5.7
こんばんは!!
今回ご紹介するのは、intra-mart既存のテーブルより”組織と組織階層”を取得する方法になります。
主要となるのは以下のテーブルになります。
・IMM_DEPARTMENT (組織マスタ)
⇒組織の基本情報を保持するテーブル
・IMM_DEPARTMENT_INC_ATH (会社組織内包)
⇒組織とその上位組織を紐づけるためのテーブル
このテーブルでは対象組織とその上位組織までの分、レコード情報を持ちます
例)「組織A11」という組織の階層が『組織A/ 組織A1/ 組織A11』の場合、以下のような形式でデータを持っている。
■実行SQL
・以下の例では、”2021/04/01″に有効なユーザ別役職情報を取得しています。
SELECT COMPANY_CD -- 会社コード , DEPARTMENT_SET_CD -- 組織セットコード , DEPARTMENT_CD -- 組織コード , DEPT_NAME -- 組織名 , START_DATE -- 所属期間開始日 , END_DATE -- 所属期間終了日 , MAX( CASE WHEN depth='5' THEN PARENT_DEPARTMENT_CD || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='4' THEN PARENT_DEPARTMENT_CD || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='3' THEN PARENT_DEPARTMENT_CD || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='2' THEN PARENT_DEPARTMENT_CD || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='1' THEN PARENT_DEPARTMENT_CD || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='0' THEN PARENT_DEPARTMENT_CD ELSE '' END ) AS DEPT_INC -- 組織階層(コード) , MAX( CASE WHEN depth='5' THEN P_DEPT_NAME || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='4' THEN P_DEPT_NAME || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='3' THEN P_DEPT_NAME || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='2' THEN P_DEPT_NAME || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='1' THEN P_DEPT_NAME || '/ ' ELSE '' END ) || MAX( CASE WHEN depth='0' THEN P_DEPT_NAME ELSE '' END ) AS DEPT_NAME_INC -- 組織階層(名称) FROM ( SELECT A.COMPANY_CD , A.DEPARTMENT_SET_CD , A.DEPARTMENT_CD , A.DEPTH , A.PARENT_DEPARTMENT_CD , B.DEPARTMENT_NAME AS P_DEPT_NAME , C.DEPARTMENT_NAME AS DEPT_NAME , C.START_DATE , C.END_DATE FROM IMM_DEPARTMENT_INC_ATH A INNER JOIN IMM_DEPARTMENT B -- 親組織名の取得 ON A.COMPANY_CD = B.COMPANY_CD AND A.DEPARTMENT_SET_CD = B.DEPARTMENT_SET_CD AND A.PARENT_DEPARTMENT_CD = B.DEPARTMENT_CD AND B.LOCALE_ID = 'ja' AND B.DELETE_FLAG = '0' AND '20210401' BETWEEN TO_CHAR(B.START_DATE, 'YYYYMMDD') AND TO_CHAR(B.END_DATE, 'YYYYMMDD') INNER JOIN IMM_DEPARTMENT C -- 子組織名の取得 ON A.COMPANY_CD = C.COMPANY_CD AND A.DEPARTMENT_SET_CD = C.DEPARTMENT_SET_CD AND A.DEPARTMENT_CD = C.DEPARTMENT_CD AND C.LOCALE_ID = 'ja' AND C.DELETE_FLAG = '0' AND '20210401' BETWEEN TO_CHAR(C.START_DATE, 'YYYYMMDD') AND TO_CHAR(C.END_DATE, 'YYYYMMDD') ) AS DEPT GROUP BY COMPANY_CD , DEPARTMENT_SET_CD , DEPARTMENT_CD , DEPT_NAME , START_DATE , END_DATE ORDER BY COMPANY_CD , DEPARTMENT_CD
他で紹介しているユーザ情報の取得やユーザ所属組織のSQLと合わせて使ってみてください。
それではまた次回。。。(^^)/~~