資料表 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。
CROSS APPLY 配合 VALUES 建構子(SQL Server 2008+)實現更通用的行內最大值計算。