【问题标题】:How do I find which range a value falls within in another table如何在另一个表中找到一个值属于哪个范围
【发布时间】:2022-09-28 21:04:08
【问题描述】:

我想取写在表 A 的数字字段中的值,并在表 B 的高范围和低范围字段中找到它对应的范围,并将其显示在结果表中。如果在多个范围内,则应取先到者(B_id 较小)

一张桌子

A_Id Number
1 10
2 50
3 60
4 52

例如(数字 = 10)

B表

B_Id Low range High range Type
1 5 30 ACARD
2 35 55 BCARD
3 50 110 CCARD

例如(低范围 >10 和高范围 <10 结果 B_id = 1)

结果表

Id Number Type
1 10 ACARD
2 50 BCARD
3 60 CCARD
4 52 BCARD
  • 你试过INNER JOIN + ROW_NUMBER() 吗?
  • 没有要加入的字段(外键)
  • 您不需要外键来执行连接。 A JOIN B ON A.Number BETWEEN B.LowRange and B.HighRange
  • 那么我如何使用行号
  • 请检查文档

标签: sql sql-server entity-framework


【解决方案1】:

您可以尝试以下 SQL。

BETWEEN用于查找范围和ROW_NUMBER有助于获得较小的值。

create table tableA(a_id int, Number int)
insert into tableA values(1,10)
insert into tableA values(2,50)
insert into tableA values(3,60)
insert into tableA values(4,52)

create table tableB(b_id int, lowRange int, highRange int, Rtype varchar(10))
insert into tableB values (1,5,30,'ACARD')
insert into tableB values (2,35,55,'BCARD')
insert into tableB values (3,50,110,'CCARD')

;with CTE AS(
select a.a_id Id, a.Number, b.Rtype, ROW_NUMBER() OVER(PARTITION BY a.a_id ORDER BY LowRange) RN
from tableA A
inner join tableB B on A.Number between B.lowRange and B.highRange
)
select Id, Number, Rtype 
from CTE
where RN = 1

drop table tableA
drop table tableB

输出:

Id          Number      Rtype
----------- ----------- ----------
1           10          ACARD
2           50          BCARD
3           60          CCARD
4           52          BCARD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多