2009-08-20 66 views
6

如何在Sql服務器中實現標量MAX(如Math.Max)。 (在essense我想要實現的東西像Max(表達式,0),使替換爲0。負值)標量最大值在SQL Server中

我在其他線程解決方案見過

  • 創建一個標量函數(如何是與表現?)
  • 情況下,當表達式> 0 THEN ELSE表達0)(然後 '表達' 被評估兩次?) MAX(聚集體)的
  • 複雜的用途。

什麼是最好的? 爲什麼Sql Server沒有內置這樣的東西?任何併發症,我沒有看到?

+0

http://stackoverflow.com/questions/989415/t-sql-equivalent-of-excel-max-function-to-return-larger-of-two-numbers – 2009-10-08 13:18:01

+0

http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max-in-net – JoeCool 2011-02-10 19:28:48

+0

爲了將此功能放入產品中,請在Microsoft Connect項目:http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar-max – usr 2012-10-22 20:22:05

回答

1

你想在sql server中創建一個名爲MAX的用戶定義的標量函數來獲取兩個參數作爲輸入,表達式和最小值,並且如果表達式超過min值則返回表達式,否則返回最小值?

我不擔心標量函數的性能,讓服務器做到這一點。 我也會使用IF而不是CASE來測試> min值。

SQL服務器沒有內置函數,因爲他們認爲它不會被廣泛使用,我想。

+0

關於標量函數的性能:它們可能非常痛苦,但我認爲假設只要沒有表/視圖邏輯,它們應該是相當快的(像內置在系統函數中一樣) - Rein 0 secs ago – Rein 2009-08-20 16:12:43

5

在所有其他主要系統中,此功能被稱爲GREATEST

SQL Server認真缺乏它。

你可以讓一堆case語句,或使用這樣的事情:

SELECT (
     SELECT MAX(expression) 
     FROM (
       SELECT expression 
       UNION ALL 
       SELECT 0 
       ) q 
     ) AS greatest 
FROM table_that_has_a_field_named_expression 

後者是一件小事比CASE報表少高性能。

+0

這很好,因爲如果第一個表達式是一個複雜的計算,你將它與一個常數進行比較,你就可以了我必須寫一次複雜的計算! – John 2012-06-28 15:01:50

+1

爲了將此功能引入產品,請在Microsoft Connect項目上進行投票:http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar-最大 – usr 2012-10-22 20:22:26

+0

投票!這絕對是一個有用的補充! – eidylon 2013-02-12 16:53:08

0

查詢優化器應該防止多次計算表達式。

爲便於閱讀/可維護性,請考慮使用CTE在CASE語句之前計算表達式。