【发布时间】:2017-05-18 09:06:58
【问题描述】:
我有两个表 TABLE1(记录列表)和 TABLE2(要检查的我的号码范围)
考虑到 TypeId,如何识别 TABLE2 中的重叠范围/行?
目标
RECORDS TABLE
+-----------------+-----------------+-------------------+
+ typeId + tbl1_NumberFrom + tbl1_NumberTo +
+-----------------+-----------------+-------------------+
+ 1 + 1 + 5 +
+ 1 + 8 + 10 +
+ 1 + 15 + 20 +
+ 2 + 4 + 7 +
+ 2 + 9 + 10 +
+ 2 + 11 + 20 +
+-----------------+-----------------+-------------------+
MY RANGES TABLE TO CHECK
+-----------------+-----------------+-------------------+
+ typeId + My_NumberFrom + My_NumberTo +
+-----------------+-----------------+-------------------+
+ 1 + 1 + 3 +
+ 1 + 6 + 8 +
+ 1 + 11 + 12 +
+ 2 + 1 + 3 +
+ 2 + 6 + 8 +
+ 2 + 10 + 10 +
+-----------------+-----------------+-------------------+
REQUIRED RESULT AS FOLLOW:
+-----------------+-----------------+-------------------+-------------------+
+ typeId + My_NumberFrom + My_NumberTo + IsOverlapping +
+-----------------+-----------------+-------------------+-------------------+
+ 1 + 1 + 3 + YES +
+ 2 + 1 + 3 + NO +
+ 1 + 6 + 8 + YES +
+ 2 + 6 + 8 + YES +
+ 1 + 11 + 12 + NO +
+ 2 + 10 + 10 + YES +
+-----------------+-----------------+-------------------+-------------------+
更多,
以上表格的 SQL
IF OBJECT_ID('tempdb.dbo.#dbtable', 'U') IS NOT NULL DROP TABLE #dbtable;
SELECT * INTO #dbtable FROM
(SELECT 1 typeId, 1 AS tbl1_NumberFrom, 5 AS tbl1_NumberTo
UNION ALL
SELECT 1 typeId, 8 AS tbl1_NumberFrom, 10 AS tbl1_NumberTo
UNION ALL
SELECT 1 typeId, 15 AS tbl1_NumberFrom, 20 AS tbl1_NumberTo
UNION ALL
SELECT 2 typeId, 4 AS tbl1_NumberFrom, 7 AS tbl1_NumberTo
UNION ALL
SELECT 2 typeId, 9 AS tbl1_NumberFrom, 10 AS tbl1_NumberTo
UNION ALL
SELECT 2 typeId, 11 AS tbl1_NumberFrom, 20 AS tbl1_NumberTo)
AS dbTable
IF OBJECT_ID('tempdb.dbo.#MyRanges', 'U') IS NOT NULL DROP TABLE #MyRanges;
SELECT * INTO #MyRanges FROM
(SELECT 1 typeId, 1 AS myr_NumberFrom, 3 AS myr_NumberTo
UNION ALL
SELECT 1 typeId, 6 AS myr_NumberFrom, 8 AS myr_NumberTo
UNION ALL
SELECT 1 typeId, 11 AS myr_NumberFrom, 12 AS myr_NumberTo
UNION ALL
SELECT 2 typeId, 1 AS My_NumberFrom, 3 AS myr_NumberTo
UNION ALL
SELECT 2 typeId, 6 AS myr_NumberFrom, 8 AS myr_NumberTo
UNION ALL
SELECT 2 typeId, 10 AS myr_NumberFrom, 10 AS myr_NumberTo)
AS MyList
SELECT * FROM #dbtable t
SELECT * FROM #MyRanges m
请推荐,
非常感谢!!
【问题讨论】:
-
最后一行 (2-10-10) 不应该是 YES 吗?它与 2-9-10 重叠。
-
@NemanjaPerovic 哦,是的,你是对的.. 修改了问题谢谢!!!
标签: sql sql-server