萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL Server 多欄位最大值查詢:自訂函數實現

場景說明

資料表 MinMax 包含四個可為 NULL 的整數欄位(Value1~Value4)。需求是找出每列中的最大值,但 SQL 內建 MAX() 僅能比較單一欄位的值,無法直接比較多個欄位。

解決方案:建立自訂標量函數

建立 Max2() 函數比較兩個值並回傳較大者,妥善處理 NULL:

CREATE FUNCTION dbo.Max2(@a INT, @b INT)
RETURNS INT
AS
BEGIN
    IF @a IS NULL SET @a = 0
    IF @b IS NULL SET @b = 0
    RETURN CASE WHEN @a > @b THEN @a ELSE @b END
END

巢狀調用實現多欄比較

SELECT dbo.Max2( Value1, dbo.Max2( Value2, dbo.Max2( Value3, Value4 ) ) )
FROM dbo.MinMax

測試結果

根據範例資料,查詢結果為:7、10、27、81。

注意事項與改進

  • 上述函數將 NULL 轉為 0,某些業務場景可能需保留 NULL。
  • 函數僅接受兩個參數,擴充性有限;可考慮撰寫接受動態參數的 CLR 函數或使用 CROSS APPLY 配合 VALUES 建構子(SQL Server 2008+)實現更通用的行內最大值計算。
copyright © 萬盛學電腦網 all rights reserved