DELIMITER //
CREATE FUNCTION `ANPI_DEP_MAKE`(p_TARGET NVARCHAR(100)) RETURNS @RETTABLE TABLE (
更新区分 NVARCHAR(15)
, 組織コード NVARCHAR(15)
, 第1階層 NVARCHAR(15)
, 第2階層 NVARCHAR(15)
, 第3階層 NVARCHAR(15)
, 所属名 NVARCHAR(100)
, 都道府県コード NVARCHAR(10)
, 報告確認対象フラグ NVARCHAR(10)
)
DETERMINISTIC
BEGIN
DECLARE JSONDATA LONGTEXT;
DROP TEMPORARY TABLE IF EXISTS tmp_安否組織一覧;
CREATE TEMPORARY TABLE tmp_安否組織一覧 (
会社コード NVARCHAR(15)
, 会社名 NVARCHAR(100)
, 本部コード NVARCHAR(15)
, 本部名 NVARCHAR(100)
, 部コード NVARCHAR(15)
, 部名 NVARCHAR(100)
, 課コード NVARCHAR(15)
, 課名 NVARCHAR(100)
, エリアコード NVARCHAR(15)
, エリア名 NVARCHAR(100)
, 店舗コード NVARCHAR(15)
, 店舗名 NVARCHAR(100)
, 所属コード NVARCHAR(15)
, 所属名 NVARCHAR(100)
, 上位部門コード NVARCHAR(15)
, 所属組織階層レベル INT
, 店舗組織レベル INT
, 最下層組織コード NVARCHAR (15)
);
DROP TEMPORARY TABLE IF EXISTS tmp_安否組織一覧投入用;
CREATE TEMPORARY TABLE tmp_安否組織一覧投入用 (
更新区分 NVARCHAR(15)
, 組織コード NVARCHAR(15)
, 第1階層 NVARCHAR(15)
, 第2階層 NVARCHAR(15)
, 第3階層 NVARCHAR(15)
, 所属名 NVARCHAR(100)
, 都道府県コード NVARCHAR(10)
, 報告確認対象フラグ NVARCHAR(10)
)
;
-- SQLINES DEMO *** の場合
-- SQLINES DEMO *** 部)を削除(会社に統合する)
insert into tmp_安否組織一覧
select * from json_table(ANPI_DEP_TARGET('0'), '$[*]' columns())
WHERE
NOT (
所属組織階層レベル IN (3, 4, 5)
AND 店舗組織レベル IS NOT NULL
);
-- SQLINES DEMO *** をクリア
-- 上位... SQLINES DEMO ***
UPDATE tmp_安否組織一覧
SET
本部コード = NULL
, 本部名 = NULL
, 部コード = NULL
, 部名 = NULL
WHERE
店舗組織レベル = 8
;
-- SQLINES DEMO *** 否組織一覧 order by 所属コード
-- SQLINES DEMO *** -------------------------------
-- 安否... SQLINES DEMO ***
-- 第1... SQLINES DEMO ***
-- SQLINES DEMO *** 理を分岐
-- 配下... SQLINES DEMO ***
-- SQLINES DEMO *** 課でない場合)
-- SQLINES DEMO *** 織がエリアでない場合)
-- SQLINES DEMO *** の組織の想定
-- SQLINES DEMO *** )に2組織ある場合は本部、どちらか1組織の場合はその組織を設定
-- SQLINES DEMO *** )に2組織ある場合は部、どちらか1組織の場合はブランク
INSERT INTO tmp_安否組織一覧投入用
SELECT
'1' AS 更新区分
, DEP.所属コード AS `組織コード`
, CASE
WHEN DEP.所属コード <> DEP.会社コード THEN DEP.会社コード END AS `第1階層`
, CASE
WHEN DEP.店舗組織レベル = 8
THEN CASE WHEN DEP.所属コード <> DEP.課コード THEN DEP.課コード END
WHEN DEP.店舗組織レベル IS NULL
THEN
CASE WHEN DEP.所属コード = DEP.本部コード THEN ''
WHEN DEP.所属コード = DEP.部コード THEN DEP.本部コード
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NOT NULL AND DEP.部コード IS NOT NULL THEN DEP.本部コード
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NULL AND DEP.部コード IS NOT NULL THEN DEP.部コード
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NOT NULL AND DEP.部コード IS NULL THEN DEP.本部コード
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NULL AND DEP.部コード IS NULL THEN ''
END
END AS `第2階層`
, CASE
WHEN DEP.店舗組織レベル = 8
THEN CASE WHEN DEP.所属コード <> DEP.エリアコード THEN DEP.エリアコード END
WHEN DEP.店舗組織レベル IS NULL
THEN
CASE
WHEN DEP.所属コード = DEP.本部コード THEN ''
WHEN DEP.所属コード = DEP.部コード THEN ''
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NULL THEN ''
WHEN DEP.所属コード = DEP.課コード AND DEP.本部コード IS NOT NULL THEN DEP.部コード
END
END AS `第3階層`
, DEP.所属名
, CASE
WHEN TENPO.PREFECTURE_CODE IS NULL THEN '13'
ELSE TENPO.PREFECTURE_CODE
END AS `都道府県コード`
, CASE
WHEN DEP.所属コード LIKE '11%' THEN '1'
ELSE '0'
END AS `報告確認対象フラグ`
-- ... SQLINES DEMO ***
FROM
tmp_安否組織一覧 DEP
LEFT JOIN ANPI_YEXT_TENPO_MASTER TENPO
ON DEP.所属コード = TENPO.SHOP_CODE
UNION ALL
SELECT * FROM ANPI_EXTERNAL_DEPARTMENT
;
UPDATE tmp_安否組織一覧投入用
SET
更新区分 = TRIM(IFNULL(更新区分, ''))
, 組織コード = TRIM(IFNULL(組織コード, ''))
, 第1階層 = TRIM(IFNULL(第1階層, ''))
, 第2階層 = TRIM(IFNULL(第2階層, ''))
, 第3階層 = TRIM(IFNULL(第3階層, ''))
, 所属名 = TRIM(IFNULL(所属名, ''))
, 都道府県コード = TRIM(IFNULL(都道府県コード, ''))
, 報告確認対象フラグ = TRIM(IFNULL(報告確認対象フラグ, ''))
;
IF p_TARGET = 0 THEN
INSERT INTO @RETTABLE
SELECT * FROM tmp_安否組織一覧投入用;
ELSE
INSERT INTO @RETTABLE
SELECT * FROM tmp_安否組織一覧投入用
EXCEPT
select * from ANPI_DEPARTMENT
where 更新区分 ='1'
union
SELECT
'2' AS `更新区分`
, ANPI_DEP.組織コード
, ANPI_DEP.第1階層
, ANPI_DEP.第2階層
, ANPI_DEP.第3階層
, ANPI_DEP.所属名
, ANPI_DEP.都道府県コード
, ANPI_DEP.報告確認対象フラグ
FROM
(SELECT * FROM ANPI_DEPARTMENT WHERE 更新区分 = '1') ANPI_DEP
LEFT JOIN tmp_安否組織一覧投入用 DEP
ON ANPI_DEP.組織コード = DEP.組織コード
WHERE
DEP.組織コード IS NULL;
END IF;
RETURN; END;
//
DELIMITER ;