画面設計書 QCL00030 退職後一括更新(給与) — 02_一括更新対象職員一覧の取得SQL
1. SQL 全景
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)の意味
- 副問合せ J は DJND7500LOG の存在チェック専用 — CSHAINNO 列だけを GROUP BY で取る
- J.CSHAINNO = NULL → 人事クリア未実行 → 出力 NULL
- J.CSHAINNO に値あり → 人事クリア実行済 → 出力 '済'
- 一覧画面で「済」表示行はグレーアウト → 二重クリア防止 UI
- DECODE は Oracle 関数。本番 Oracle 想定、CI 検証時は PostgreSQL
6. ROW_NUMBER() による一意化
- 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 条件 — 設計の核
- 定員区分='1' = 一般職員 → cteiinkb='1' のみ抽出
- 定員区分<>'1' = 一般以外(再任用/特地/嘱託等)→ cteiinkb<>'1' を抽出
- 業務 background: 一般職 と 一般以外で 退職後の社会保険/住民税/共済等の継続/停止が異なるため、一括更新バッチを分けて流す必要がある
- 画面では「一般職一括更新」「一般以外一括更新」を別ボタンで起動する設計
9. 全体処理フロー(01〜04 接続)
10. 補足事項
- DECODE / ROW_NUMBER / 副問合せ 等は Oracle 方言。本番は Oracle、CI は PostgreSQL(updsv7_opho_ci)で動作確認
- ORDER BY なし — 一覧表示順は画面/MyBatis 側の default-sort で制御する設計
- LIMIT/OFFSET なし — 一覧表示件数の paging は呼び側責務
- DJND7500LOG 副問合せは CSHAINNO のみ取得 — 槽位フラグ(nclearflg01〜40)は本 SQL では判定材料にしない(「存在するか」だけ)