2015-11-19 48 views
0

最低有沒有什麼快捷功能是等價的:SELECT最大/ 2個或多個字段

CASE 
    WHEN FieldA > FieldB 
    THEN FieldA 
    WHEN FieldA < FieldB 
    THEN FieldB  
END 

顯然,這個人是不是很難寫,但說你有更多的比較做出,即

CASE 
    WHEN FieldA > FieldB 
    AND FieldA > FieldC 
    AND FieldA > FieldD 
    THEN FieldA 
    WHEN FieldA < FieldB 
    AND FieldC < FieldB 
    AND FieldD < FieldB 
    THEN FieldB 
    ... 
END 

它會變得非常麻煩。據我所知,UDF可以創建以處理這個問題,或者你可以這樣做:

SELECT MAX(Field) FROM 
(
SELECT FieldA AS Field 
FROM Table 
UNION ALL 
SELECT FieldB AS Field 
FROM Table 
UNION ALL 
SELECT FieldC AS Field 
FROM Table 
UNION ALL 
SELECT FieldD AS Field 
FROM Table 
) 

,但有沒有在任何TSQL快捷方式嗎?出於好奇,其他DBMS語言是否有這樣的內置函數?

+0

[獲取至少兩個值的SQL]的可能的複製(http://stackoverflow.com/questions/1947753 /在-sql-two-values-in-sql中取得最小值) – MrTux

+0

您可以將所有文件插入@或#臨時表,然後選擇最大值或最小值。 –

+0

@MrTux我在這個問題中提到了在這個線程中給出的答案,我只是想看看是否有更有效的方法,或者正如在下面的答案中提到的那樣,它可以被添加到TSQL中,特別是如果它存在於其他語言 –

回答

2

你似乎想要的是greatest()least()。大多數數據庫提供這些非常有用的功能我們可以遊說微軟添加它們。

在此期間,有一個古怪的使用apply,可以解決這個問題:

select t.*, maxcol 
from t cross apply 
    (select max(col) as maxcol 
     from (values (fieldA), (fieldB), (fieldC) 
      ) v(col) 
    ) m;