# 画面設計書 QCL00030 退職後一括更新(給与) — 02_一括更新対象職員一覧の取得SQL ## 1. SQL 全景 ``` SELECT CSHAINNO, -- 職員番号 CNAMEKNJ, -- 漢字氏名 BKYK_CDE, -- 部局コード BKYK_NME, -- 部局名称 DTAISHA, -- 退職年月日 CMNUSER, -- 更新ユーザ DMNDATE, -- 更新年月日 NJINJIFLG, -- 人事クリア NQYOCALCFLG -- 給与計算フラグ FROM ( SELECT A.CSHAINNO, A.CNAMEKNJ, A.BKYK_CDE, A.BKYK_NME, A.DTAISHA, L.CMNUSER, L.DMNDATE, DECODE(J.CSHAINNO, NULL, NULL, '済') NJINJIFLG, A.NQYOCALCFLG, ROW_NUMBER() OVER(PARTITION BY A.CSHAINNO ORDER BY L.DMNDATE DESC) RID FROM XKKIHON A LEFT JOIN ( SELECT CSHAINNO FROM DJND7500LOG WHERE CCOMPKB = 入力パラメータ「会社区分」 AND CTEIINKB = 入力パラメータ「定員区分」 GROUP BY CSHAINNO ) J ON J.CSHAINNO = A.CSHAINNO LEFT JOIN UCLR1000LOG L ON L.CCOMPKB = A.CCOMPKB AND L.CSHAINNO = A.CSHAINNO AND L.DTAISHA = A.DTAISHA WHERE A.CCOMPKB = 入力パラメータ「会社区分」 AND A.CQTAIKEIKB = 入力パラメータ「体系区分」 AND A.DGAITONG = 入力パラメータ「該当年月」 AND A.NQSHOYOKB = 入力パラメータ「給与賞与区分」 AND A.NQSHOYOSEQ = 0 AND A.DTAISHA >= 入力パラメータ「開始退職年月日」 AND A.DTAISHA <= 入力パラメータ「終了退職年月日」 AND ( (入力パラメータ「定員区分」='1' AND A.CTEIINKB = '1') OR (入力パラメータ「定員区分」<>'1' AND A.CTEIINKB <> '1') ) ) WHERE RID = 1 ``` ## 2. 業務位置づけ - 機能 ID: QCL00030 退職後一括更新(給与) - 用途: 「退職後一括更新」実行画面の一覧グリッド表示用 SELECT - 入力: 会社区分 / 体系区分 / 該当年月 / 給与賞与区分 / 定員区分 / 開始退職年月日 / 終了退職年月日 - 出力: 当該会社/処理月の退職者一覧(職員番号/氏名/部局/退職日/更新者/更新日時/人事クリア済フラグ/給与計算フラグ) - 後続: 一覧確認後にユーザが「一括更新実行」押下 → 03_給与一括更新実行SQL が本一覧の CSHAINNO 群に対して走る ## 3. 結合 3 表の物理構造 | エイリアス | 物理表 | 行粒度 | 主役役割 | |---|---|---|---| | A | XKKIHON | 社員×処理月×給与賞与 | 退職者抽出の母集団 | | J | DJND7500LOG | 社員単位(GROUP BY 済) | 人事クリア済フラグ生成源 | | L | UCLR1000LOG | 社員×処理月×退職日 | 給与クリア実行の最新履歴(操作者/日時)| ### XKKIHON(情報スキーマ実測 2026-08-20) - NOT NULL: ccompkb(2), cqtaikeikb(2), dgaitong(date), nqshoyokb, nqshoyoseq, cshainno(10) - dtaisha(date) は NULLABLE — 同処理月内に同社員の複数 dtaisha 存在を許容 - cteiinkb(varchar 10) — 他表は varchar(1) だが比較上は問題なし ### DJND7500LOG(情報スキーマ実測) - ヘッダ 3 列 NOT NULL: ccompkb, cteiinkb, cshainno - cnameknj / bkyk_cde / bkyk_nme は冗長表示用(NULLABLE) - tsyk_dte / dtsyk_dte 等の他カラムは本 SQL では未参照 - nclearflg01〜40: 人事系クリア対象 40 槽位フラグ ### UCLR1000LOG(情報スキーマ実測) - ヘッダ 4 列 NOT NULL: ccompkb, cqtaikeikb, cteiinkb, cshainno - dtaisha(date) NULLABLE - nclearflg_s01〜s40: 給与支給 40 槽位、nclearflg_k01〜k40: 給与控除 40 槽位(合計 80 槽位五花) - njinjiflg は存在するが本 SQL では参照しない(L.CMNUSER/L.DMNDATE のみ使用) ## 4. SELECT 各列の意味 | 列 | 物理列 | 業務 semantic | |---|---|---| | CSHAINNO | A.CSHAINNO | 一覧キー(後続更新SQL の絞り込みキー)| | CNAMEKNJ | A.CNAMEKNJ | 表示用氏名 | | BKYK_CDE | A.BKYK_CDE | 表示用部局コード | | BKYK_NME | A.BKYK_NME | 表示用部局名称 | | DTAISHA | A.DTAISHA | 退職年月日 — 期間絞り込み対象 | | CMNUSER | L.CMNUSER | 給与クリア実行の最終操作者 | | DMNDATE | L.DMNDATE | 給与クリア実行の最終操作日時 | | NJINJIFLG | DECODE(J.CSHAINNO, NULL, NULL, '済') | 人事クリア済フラグ(後述)| | NQYOCALCFLG | A.NQYOCALCFLG | 給与計算フラグ(給与計算実行済か)| ## 5. NJINJIFLG(DECODE)の意味 ```sql DECODE(J.CSHAINNO, NULL, NULL, '済') NJINJIFLG ``` - 副問合せ J は DJND7500LOG の存在チェック専用 — CSHAINNO 列だけを GROUP BY で取る - J.CSHAINNO = NULL → 人事クリア未実行 → 出力 NULL - J.CSHAINNO に値あり → 人事クリア実行済 → 出力 '済' - 一覧画面で「済」表示行はグレーアウト → 二重クリア防止 UI - DECODE は Oracle 関数。本番 Oracle 想定、CI 検証時は PostgreSQL ## 6. ROW_NUMBER() による一意化 ```sql ROW_NUMBER() OVER(PARTITION BY A.CSHAINNO ORDER BY L.DMNDATE DESC) RID WHERE RID = 1 ``` - UCLR1000LOG は同社員で複数回クリア実行履歴が残り得る(再退職処理/修正実行) - 1 社員に対して複数行が JOIN されるのを防ぐため、最新 DMNDATE 行のみ採用 - xkkihon.dtaisha が NULLABLE な点とも整合(同処理月内の同社員複数 dtaisha は RID=1 で代表 1 行に集約) ## 7. WHERE 句 9 条件の意味 | # | 条件 | 業務 semantic | |---|---|---| | 1 | A.CCOMPKB = 会社区分 | 会社ロック(ログイン所属会社)| | 2 | A.CQTAIKEIKB = 体系区分 | 給与体系(一般/再任用/特地等)固定絞り込み | | 3 | A.DGAITONG = 該当年月 | 退職処理を行う処理月(月末日) | | 4 | A.NQSHOYOKB = 給与賞与区分 | 0=給与、1=賞与 | | 5 | A.NQSHOYOSEQ = 0 | 通常明細のみ。賞与明細(1〜n)は退職処理対象外 | | 6 | A.DTAISHA BETWEEN 開始/終了 | 画面で指定した退職日範囲内のみ抽出 | | 7 | 定員区分 OR 条件 | 一般職/一般以外 の母集団切替(次節)| ## 8. 定員区分 OR 条件 — 設計の核 ```sql AND ( (入力パラメータ「定員区分」='1' AND A.CTEIINKB = '1') OR (入力パラメータ「定員区分」<>'1' AND A.CTEIINKB <> '1') ) ``` - 定員区分='1' = **一般職員** → cteiinkb='1' のみ抽出 - 定員区分<>'1' = **一般以外**(再任用/特地/嘱託等)→ cteiinkb<>'1' を抽出 - 業務 background: 一般職 と 一般以外で 退職後の社会保険/住民税/共済等の継続/停止が異なるため、一括更新バッチを分けて流す必要がある - 画面では「一般職一括更新」「一般以外一括更新」を別ボタンで起動する設計 ## 9. 全体処理フロー(01〜04 接続) ``` [01_対象項目取得] UCLR1000MST → クリア対象項目マスタ(40 槽位) ↓ ccompkb, cteiinkb 共通 [02_対象職員一覧] XKKIHON + DJND7500LOG + UCLR1000LOG ← 本 SQL ↓ cshainno 群 [03_一括更新実行] UCLR1000LOG に INSERT(実行履歴) + xkkihon の各項目を CLEAR(NULL 化) ↓ 槽位一致 [04_クリア対象項目] UCLR1000MST × UCLR1000LOG × xkkihon → クリア実行 ``` ## 10. 補足事項 - DECODE / ROW_NUMBER / 副問合せ 等は Oracle 方言。本番は Oracle、CI は PostgreSQL(updsv7_opho_ci)で動作確認 - ORDER BY なし — 一覧表示順は画面/MyBatis 側の default-sort で制御する設計 - LIMIT/OFFSET なし — 一覧表示件数の paging は呼び側責務 - DJND7500LOG 副問合せは CSHAINNO のみ取得 — 槽位フラグ(nclearflg01〜40)は本 SQL では判定材料にしない(「存在するか」だけ)