Я хочу разместить значения в пределах диапазона, заданного только минимальным значением, аналогично использованию ВПР / ГПР в Excel с использованием критерия «ЛОЖЬ».
Как видно ниже, TableScore перечисляет нижние пороговые значения (CutpointVal) для значения, которое должно быть присвоено определенное c количество точек (минимальное значение в диапазоне). Приведенный ниже код SQL выполняет это в два этапа, при этом первый запрос генерирует таблицу, которая включает высокое значение для каждого низкого значения, таким образом создавая полный диапазон.
Однако это несколько неуклюжий способ сделать это, особенно когда вы пытаетесь повторить это много раз. Исходная таблица (TableScore) не может быть изменена для включения высоких значений. Есть ли способ реализовать sh аналогичный механизм только с одним запросом?
Main
ID Score
72625 2.5
78261 3.2
82766 4.7
58383 0.3
TableScore
CutpointVal Points
0 0
0.3 1
1.2 2
2.7 3
3.4 4
Запрос верхнего и нижнего диапазона (RangeQry):
SELECT a.CutpointVal AS LowVal, Val(Nz((SELECT TOP 1 [CutpointVal]-0.001
FROM TableScore b
WHERE b.Points > a.Points
ORDER BY b.Points ASC),9999)) AS HighVal, a.Points
FROM TableScore AS a
ORDER BY a.Points;
Запрос назначения диапазона:
SELECT Main.ID, Main.Score, RangeQry.LowVal, RangeQry.HighVal, RangeQry.Points AS PTS
FROM RangeQry, Main
WHERE (((Main.Score) Between [RangeQry].[LowVal] And [RangeQry].[HighVal]));
Желаемый результат:
ID Score Points
72625 2.5 2
78261 3.2 3
82766 4.7 4
58383 0.3 1