Burning Thoughts Ответов: 1

Как проанализировать L функция поиска в Excel в SQL


Как выполнить функцию поиска excel в sql.
Согласно моему пониманию, я могу использовать условие where для поиска значения в таблице, так как оно работает как поиск при совпадении точных значений, здесь сценарий отличается в excel, когда мы выполняем операцию поиска, если искомое значение недоступно в целевом столбце, он выберет наименьшее значение из того же столбца

Пример: - я хочу посмотреть это значение 33.33% в cola и должен вернуть значение из colc как 13
в excel я получаю правильный результат. но как выполнить эту операцию в SQL server query

Проблема № 1) 33.33% не лежит в значениях колы

Проблема № 2) Как мне выбрать значение 13 из colc , когда 33.33% близко к 33.42%, то я получу 14 из colc
COLA      COLB       COLC
33.06%	  1.06	      13
33.42%	  1.07	      14
33.78%	  1.08	      15


Что я уже пробовал:

я попробовал использовать условие where
select colc from tablename where cola=33.33

SELECT  sum(colc)/3 From tablename where round(COLA,0)=33.00 -- randomly tried

1 Ответов

Рейтинг:
8

CHill60

Используя этот пример таблицы

create table tablename
(
	COLA      float,
	COLB       float,
	COLC int
)
insert into tablename values
(33.06,	  1.06,	      13),
(33.42,	  1.07,	      14),
(33.78,	  1.08,	      15)

Вероятно, самый простой способ получить нужные вам данные-это упорядочить таблицу по разнице между вашим входным значением и COLA. Затем просто выберите верхний возвращенный ряд.
declare @lookupval float = 33.33

declare @returnval int = (SELECT TOP 1 COLC FROM tablename 
							ORDER BY ABS( COLA - @lookupval ))


[Edit - извиняюсь, я неправильно истолковал это как требование самого близкого значения, а не самого близкого еще ниже]
declare @returnval int = (SELECT TOP 1 COLC FROM tablename 
          WHERE cola < @lookupval ORDER BY COLA)

[Edit 2 - после комментария OP]
Объединение обоих моих предыдущих подходов дает самое близкое значение к входу, которое ниже, чем вход
declare @lookupval float = 33.33
declare @returnval int = (SELECT TOP 1 COLC FROM tablename 
	WHERE cola < @lookupval 
	ORDER BY ABS( COLA - @lookupval ))
print @returnval


Burning Thoughts

мне нужно вернуть 13.

я получаю 14 в соответствии с вашим решением

CHill60

Извините , я неправильно понял вопрос. Я обновил свое решение

Burning Thoughts

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

Коль а =0 коль б =0 коль с= -94

то, что когда-либо lookupvalue вы передаете ему, дает только -94

CHill60

Я объединил эти подходы - см. отредактированное решение

Burning Thoughts

Большое спасибо..

CHill60

В конце концов я добрался туда :-)