目前,我有以下 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 中模拟交叉连接时,我想拒绝或失败该工作。