2009-12-28 6 views
2

Я искал хороший эквивалент функции Oracle LEAST.SQL Server эквивалентен Oracle LEAST?

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

Что я буду делать в Oracle является:

SELECT LEAST 
(
select expression1 from dual, 
select expression2 from dual, 
select expression3 from dual 
) from dual 

См http://www.techonthenet.com/oracle/functions/least.php больше на Oracle НАИМЕНЬШИМ.

Если выражение1 вернулся 10, ВЫРАЖЕНИЕ2 вернуть 5 и expression3 reeturned 30, все выражение будет возвращать 5.

Поскольку это может быть около 10-20 расчетов, случай, когда синтаксис собирается получить громоздкой быстро.

Хотя код будет более читабельным, если мы его разложим больше, я подумал, что было бы более эффективно делать это в рамках одного запроса к базе данных. Дай мне знать, что я ошибаюсь в этом вопросе, пожалуйста!

I.e., является хранимой процедурой с 20 простыми запросами, значительно медленнее хранимой процедуры с одним запросом, который ссылается на множество таблиц в одном запросе.

+2

Возможно, стоит посмотреть на http://dba.stackexchange.com/questions/21542/what-is-the-most-efficient-way-to-get- the-minimum-of-multiple-columns-on- sql-ser - он обрабатывает GREATEST vs. LEAST, но концепции должны быть эквивалентными. –

+0

Взгляните на несколько решений здесь: http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max -in-ne – Vadzim

ответ

5

mayby ​​этот запрос может помочь:

SELECT min(c1) 
from ( 
     select expression1 as c1 
     union all 
     select expression2 as c1 
     union all 
     select expression3 as c1 
) 
+0

Спасибо, это очень полезно! – Jade

+0

Производная таблица (из конструктора значения таблицы) может выполнить нечто очень похожее. Семантика почти такая же, как пример выше - основное отличие синтаксиса, которое может быть более или менее компактным в зависимости от контекста. Хороший пример [здесь] (https://msdn.microsoft.com/en-us/library/dd776382.aspx#Anchor_5), в дополнение к сообществам. – unbob

-1

Функция наименьшей() применяется горизонтально в Oracle (на уровне строк), в то время как Мин() применяется вертикально через колонку. Для примера в вопросе требуется Min().

+0

Спасибо за ответ, но правильный, подробный и принятый ответ был дан 7 лет назад ... – AnoE

Смежные вопросы