Распределение значений TSQL на основе существующих диапазонов - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующие таблицы:

table 1

table 2

Используя TSQL, я долженсопоставьте значения с правильными идентификаторами
пример: значение 23 от 1 до 100, поэтому идентификатор = A

Я пытаюсь использовать следующую логику:

1.Я добавил столбец идентификаторов в T2:

id=(row_number() over(order by value asc))

2.Объявите переменную:

declare@ as float;  
set value (select value from T2 where id=1)  

3.Случай, чтобы определить, находится ли значение в диапазоне, и исключить другие результаты

select * from   
(  
select   
value=@value  
,a.*  
,test=case  when @value between a.start_range and a.end_range then '1' else'2'   end  
from   
    T1 a  
    )  a  
where   
    a.test=1  

Это работает для первой записи, но как это можно сделать, если обе таблицы> 1000 записей в таблице?

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Если я что-то упускаю, здесь должен работать простой запрос на соединение:

SELECT
    t2.value,
    COALESCE(t1.id, 'NA') AS id
FROM table2 t2
LEFT JOIN table1 t1
    ON t2.value BETWEEN t1.[start range] AND t1.[end range];

Чтобы решить проблему, поднятую @SeanLange, использование BETWEEN здесь не является злом, я думаю, потому что вашдиапазоны, кажется, полностью не перекрываются.Таким образом, мы можем взять инклюзивный диапазон на обоих концах, что является желаемым поведением.

0 голосов
/ 25 июня 2018

Вы можете использовать apply:

select t.value, tt.id
from table t outer apply (
     select top (1) t1.id
     from table1 t1
     where t.v >= t1.s and t.v <= t1.e
     order by t1.s
) tt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...