我在发现工具中处理文档父/子系列。
是否有一种简单的方法可以在多个范围列表之间返回所有数字?
我有#tempTable
个包含StartingBatesNumber
,BegAtt
和EndAtt
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
上的项目中选择BegAtt
和EndAtt
之间的每个#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?
答案 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
子句中未定义的表。