我有一个包含整数字段(字段B)的表(表A)。对于表A的每一行,我想在字段B的整数值周围构造一个+/- 100的范围,然后从字段B中查找在这些范围内的所有值。需要对字段B中的所有值执行查询。查询需要返回每个行范围内的每一行。下面是我想要做的一个例子:
Table A
_______
A 1000
B 3000
C 5000
D 1090 使用上面的表A,查询将首先找到字段B中所有整数的范围(+/- 100)。
900 - 1100
2900 - 3100
4900 - 5100
990 - 1190然后,查询将遍历这些范围,并返回表A中在生成的范围内的行。使用上面的示例,查询将返回:
A 1000
A 1000
B 3000
C 5000
D 1090
D 1090A和D会被返回两次,因为它们都在自己的范围内。如何构造一个查询来返回位于每行范围内的每一行?提前感谢你的帮助。
发布于 2011-11-21 22:31:30
SELECT t2.*
FROM tableA AS t1
INNER JOIN tableA AS t2 ON t2.fieldB >= (t1.fieldB - 100) AND t2.fieldB <= (t1.fieldB + 100)A不应该也显示两次吗,因为它也在D的范围内?(上面的问题就是这种情况-如果不正确,请详细说明原因^^)
发布于 2011-11-21 22:45:15
从每个表A记录的最里面的前置限定符开始...然后再次重新联接到表A。我已经添加了资格组范围低和嗨,以显示您正在寻找的资格赛基础…除了D出现两次之外,A也应该出现两次,因为它也符合“D”的范围。
select
a2.ShowLetter,
a2.FieldB,
GrpRanges.RangeLow,
GrpRanges.RangeHi
from
( select distinct
a1.FieldB - 100 as RangeLow,
a1.FieldB + 100 as RangeHi
from
TableA a1 ) GrpRanges
JOIN TableA a2
on a2.FieldB between GrpRanges.RangeLow and GrpRanges.RangeHi
order by
a2.ShowLetterhttps://stackoverflow.com/questions/8213354
复制相似问题