在 SQL Server 中模擬 .NET 的 Math.Max 以獲得多列
SQL Server 的 MAX
函數通常會對單一欄位進行操作,傳回該欄位中的最高值。 但是,鏡像 .NET Math.Max
的功能(比較多個值)需要在 SQL Server 中採用不同的方法。
這在 SQL Server 2008 及更高版本中很容易實現。我們舉個例子來說明:
挑戰:
您需要一個查詢來識別 NegotiatedPrice
表中每一行的 SuggestedPrice
和 Order
列之間的較大值。 像這樣天真的嘗試是行不通的:
SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice) FROM Order o
解:
簡潔高效的解決方案在 SELECT
語句中使用子查詢:
SELECT o.OrderId, (SELECT MAX(Price) FROM (VALUES (o.NegotiatedPrice), (o.SuggestedPrice)) AS AllPrices(Price)) AS MaxPrice FROM Order o
這種方法有幾個主要好處:
UNION
、PIVOT
或CASE
語句。 NULL
值。 MAX
函數可以替換為其他聚合函數(例如 MIN
、AVG
、SUM
)。 VALUES
子句新增更多條目,可以輕鬆擴充以處理兩列以上。 例如:SELECT MAX(a), MAX(b), MAX(c) FROM (VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)) AS MyTable(a, b, c)
在處理 SQL Server 中的多個欄位時,此方法提供了一種乾淨有效的方法來複製 .NET Math.Max
函數的行為。
以上是如何在 SQL Server 中複製 .NET 的 Math.Max 函數以實作多列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!