2009-12-28 102 views
2

我一直在尋找一個相當於Oracle的LEAST函數。相當於Oracle最小的SQL Server?

我希望能夠實現一個用戶定義的函數,它可以執行大約10次相當複雜的計算,並從每個計算中獲取最小值。

我會做的甲骨文是:

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

更多關於甲骨文至少可以看看http://www.techonthenet.com/oracle/functions/least.php

如果表達式返回10,表達式2返回5,和表達式3 reeturned 30,整個表達式將返回5

因爲這可能是約10-20計算,當語法是會得到快速笨拙的CASE。

雖然如果我們將其分解得更多,代碼將更具可讀性,但我認爲在一個數據庫查詢中執行代碼會更有效。請讓我知道我在這一點上不正確,請!

也就是說,一個包含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和LEAST,但概念應該是等價的。 – 2012-08-13 13:59:58

+0

看看這裏的幾個解決方案:http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max -in-ne – Vadzim 2016-01-22 12:46:34

回答

5

mayby這種查詢可以幫助:

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

謝謝,這非常有幫助! – Jade 2009-12-29 21:42:16

+0

派生表(來自表值構造函數)可以完成一些非常相似的事情。語義與上述示例幾乎相同 - 語法的主要區別在於,根據上下文的不同,它可能更多或更少。在這裏有一個很好的例子(https://msdn.microsoft.com/en-us/library/dd776382.aspx#Anchor_5),在社區添加下。 – unbob 2016-04-29 18:29:36

-1

功能最少()是Oracle應用水平(在行級),而MIN()是在一列垂直應用。問題中的示例需要Min()。

+0

感謝您的回覆,但7年前已經給出了正確,詳細和可接受的答案... – AnoE 2016-04-08 11:27:58