SQL 2012 声明到 return 范围内的查找值
SQL 2012 statement to return Lookup Values in Ranges
所以我有 2 个表,
Table A has 3 columns:
NumberRangeStart, NumberRangeEnd, RangeName
Table B has 2 columns:
Number, RangeName
我想要输出到
TableC:
B.Number, B.RangeName, A.NumberRange, A.RangeName
我想查找 B.Number
位于 A.NumberRangeStart and A.NumberRangeEnd
之间的位置,并报告分配的 RangeName
。
任何想法如何在 SQL 2012 年实现这一目标?
我想我需要一个 CTE,但不确定如何去做!
也许:
SELECT DISTINCT B.RangeName
FROM TableB B
WHERE EXISTS
(
SELECT 1 FROM TableA A
WHERE A.RangeName = B.RangeName
AND B.Number BETWEEN A.NumberRangeStart AND A.NumberRangeEnd
)
这看起来像是在插入语句中使用的简单的两个条件内连接。
INSERT INTO TableC
SELECT
TableB.Number,
TableB.RangeName,
TableA.NumberRangeStart,
TableA.NumberRangeEnd,
TableA.RangeName
FROM TableA
INNER JOIN TableB ON TableB.Number BETWEEN TableA.NumberRangeStart AND TableA.NumberRangeEnd
-- Optional based on clarification
WHERE TableA.RangeName <> TableB.RangeName;
create table #TableA (
NumberRangeStart int,
NumberRangeEnd int,
RangeName nvarchar(200))
create table #TableB (
Number int)
insert into #TableA values (0, 100, '0 to 100'), (50, 70, '50 to 70'), (150, 1000, '150 to 1000')
insert into #TableB values (10), (20), (40), (60), (200), (2000)
select b.Number, coalesce(a.Rangename, 'Not in any range')
from #TableB b left join #TableA a on b.Number between a.NumberRangeStart and a.NumberRangeEnd
所以我有 2 个表,
Table A has 3 columns:
NumberRangeStart, NumberRangeEnd, RangeName
Table B has 2 columns:
Number, RangeName
我想要输出到
TableC:
B.Number, B.RangeName, A.NumberRange, A.RangeName
我想查找 B.Number
位于 A.NumberRangeStart and A.NumberRangeEnd
之间的位置,并报告分配的 RangeName
。
任何想法如何在 SQL 2012 年实现这一目标? 我想我需要一个 CTE,但不确定如何去做!
也许:
SELECT DISTINCT B.RangeName
FROM TableB B
WHERE EXISTS
(
SELECT 1 FROM TableA A
WHERE A.RangeName = B.RangeName
AND B.Number BETWEEN A.NumberRangeStart AND A.NumberRangeEnd
)
这看起来像是在插入语句中使用的简单的两个条件内连接。
INSERT INTO TableC
SELECT
TableB.Number,
TableB.RangeName,
TableA.NumberRangeStart,
TableA.NumberRangeEnd,
TableA.RangeName
FROM TableA
INNER JOIN TableB ON TableB.Number BETWEEN TableA.NumberRangeStart AND TableA.NumberRangeEnd
-- Optional based on clarification
WHERE TableA.RangeName <> TableB.RangeName;
create table #TableA (
NumberRangeStart int,
NumberRangeEnd int,
RangeName nvarchar(200))
create table #TableB (
Number int)
insert into #TableA values (0, 100, '0 to 100'), (50, 70, '50 to 70'), (150, 1000, '150 to 1000')
insert into #TableB values (10), (20), (40), (60), (200), (2000)
select b.Number, coalesce(a.Rangename, 'Not in any range')
from #TableB b left join #TableA a on b.Number between a.NumberRangeStart and a.NumberRangeEnd