数值范围介于数值范围之间

时间:2017-05-23 13:59:01

标签: sql-server tsql range

我遇到一个问题,我不知道是否可以只用一个选择来解决。

我有一个范围列表,我需要与另一个范围列表匹配,第一个范围的任何数字......

让我试着解释一下:

Table 1:                 Table 2

|   From |     To |     |   From |      To |
|--------|--------|     |--------|---------|
|      0 |   2000 |     |      0 |   15000 |
|   2001 |  10000 |     |  15000 |   25000 |
|  10001 |  50000 |     |  25000 |   50000 |
|  50001 | 200000 |     |  50000 |  200000 |
| 200001 | 500000 |     | 200000 |  400000 |
| 500001 |      0 |     | 400000 |  700000 |
                        | 700000 | 1500000 |

[表1]第一行(0 - 2000)很容易,与[表2]第一行(0 - 15000)匹配。

但我需要[表1](10001 - 50000)的第三行(和任何其他类似情况,如第5行)与[表2]的前三行匹配,因为:< / p>

此范围内的数字10001 - 50000介于 0 15000 之间,但 15000 25000 25000 50000 ...

所需的结果应该是这样的:

Table result:

| From (Table 1) | To (Table 1) | From (Table 2) | To (Table 2) |
|----------------|--------------|----------------|--------------|
|              0 |         2000 |              0 |        15000 |
|           2001 |        10000 |              0 |        15000 |
|          10001 |        50000 |              0 |        15000 |
|          10001 |        50000 |          15000 |        25000 |
|          10001 |        50000 |          25000 |        50000 |
| etc...

我的目的是在SQL中没有SQL函数。

1 个答案:

答案 0 :(得分:4)

要查看是否匹配重叠,请执行此操作。

SELECT T1.*, T2.*
FROM Table1 T1
JOIN Table2 T2
  ON T1.From < T2.To
 AND T1.To   > T2.From

编辑:如果边框范围重复计算,则使用>=