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と合わせて使ってみてください。
それではまた次回。。。(^^)/~~