查找多个范围之间的所有INT

时间:2015-11-01 15:28:17

标签: sql sql-server tsql

我在发现工具中处理文档父/子系列。

是否有一种简单的方法可以在多个范围列表之间返回所有数字?

我有#tempTable个包含StartingBatesNumberBegAttEndAtt

的359行

BegAtt是贝茨范围的开头,EndAtt是贝茨范围内的最后一个文档。这里是#tempTable的一些示例数据:

StartingBatesNumber BegAtt  EndAtt
CTRL00262209    CTRL00262208    CTRL00262209
CTRL00262295    CTRL00262292    CTRL00262295
CTRL00262325    CTRL00262323    CTRL00262326
CTRL00262348    CTRL00262347    CTRL00262362
CTRL00262398    CTRL00262395    CTRL00262399
CTRL00262518    CTRL00262509    CTRL00262597
CTRL00262575    CTRL00262509    CTRL00262597
CTRL00262946    CTRL00262934    CTRL00262955
CTRL00263301    CTRL00263280    CTRL00263304
CTRL00263342    CTRL00263336    CTRL00263360
CTRL00263602    CTRL00263590    CTRL00263614
CTRL00263649    CTRL00263648    CTRL00263649
CTRL00263810    CTRL00263809    CTRL00263810
CTRL00264691    CTRL00264690    CTRL00264691
CTRL00265211    CTRL00265192    CTRL00265320

此临时表是名为ExportedItems的较大表的子集,其中包含相同的列。我需要从StartingBatesNumber上的项目中选择BegAttEndAtt之间的每个#tempTable。到目前为止我所拥有的是:

SELECT EI.StartingBatesNumber
FROM ExportedItems AS EI WITH (NOLOCK)
WHERE EI.StartingBatesNumber BETWEEN #tempTable.BegAtt AND #tempTable.EndAtt
ORDER BY EI.StartingBatesNumber

我知道我不能加入我的#tempTable,但是如果我在StartingBatesNumber上添加了正式联接,那么我的结果将仅限于子集上的项目,并且不允许我拉入StartingBatesNumbers我的名单上已经没有了。我想找到一种递归方式来选择#tempTable上所有范围之间的所有StartingBatesNumbers。

我知道我可以使用光标在循环中递增来解决这个问题,但我想知道是否有更简单的方法。也许是一个递归的CTE?

1 个答案:

答案 0 :(得分:2)

  

我知道我不能加入我的#tempTable

我不确定你的意思。这完全有效,因为它是一个SQL语句:

SELECT EI.StartingBatesNumber
FROM ExportedItems EI WITH (NOLOCK) JOIN
     #tempTable tt
     ON EI.StartingBatesNumber BETWEEN tt.BegAtt AND tt.EndAtt
ORDER BY EI.StartingBatesNumber;

您的陈述不正确,因为您引用了FROM子句中未定义的表。