現在、地理的領域で競合 (重複) が発生しているレコードを特定する次の SQL があります。テーブルの内容を説明するために、CTE として以下を提供しました。
WITH
A AS
(
SELECT
AREA_ID,
AREA_CATEGORY,
AREA_NAME,
START_ZIP,
END_ZIP
FROM
AREA_DEFINITION
)
,
B AS
(
SELECT
AREA_ID,
AREA_CATEGORY,
AREA_NAME,
START_ZIP,
END_ZIP
FROM
AREA_DEFINITION
)
SELECT
A.AREA_ID,
A.AREA_NAME,
A.AREA_CATEGORY,
A.START_ZIP AS A_START_ZIP,
A.END_ZIP AS A_END_ZIP,
B.START_ZIP AS A_START_ZIP,
B.END_ZIP AS A_END_ZIP
FROM
A
CROSS JOIN
B
WHERE
A.AREA_ID != B.AREA_ID
AND A.AREA_NAME = B.AREA_NAME
AND A.AREA_CATEGORY = B.AREA_CATEGORY
AND((
INT(A.START_ZIP) BETWEEN INT(B.START_ZIP) AND
INT(B.END_ZIP))
OR(
INT(B.START_ZIP) BETWEEN INT(A.START_ZIP) AND
INT(A.END_ZIP)))
入力シーケンシャル ファイル (CSV) ファイルで地域が提供されると、次のようなファイルが得られます。
AREA_NAME, AREA_CATEGORY, AREA_START_ZIP, AREA_END_ZIP
Domestic, Sales, 00000, 99999
South, Wholesale, 75000, 85000
East, HQ, 00200, 00210
オーバーラップが存在し、DataStage でクロス結合をエミュレートする方法がわからない場合、ジョブを拒否または失敗させたいと考えています。