在 SQL Server 中模拟 .NET 的 Math.Max 以获得多列
SQL Server 的 MAX
函数通常对单个列进行操作,返回该列中的最高值。 但是,镜像 .NET Math.Max
的功能(比较多个值)需要在 SQL Server 中采用不同的方法。
这在 SQL Server 2008 及更高版本中很容易实现。我们举个例子来说明一下:
挑战:
您需要一个查询来识别 NegotiatedPrice
表中每一行的 SuggestedPrice
和 Order
列之间的较大值。 像这样天真的尝试是行不通的:
<code class="language-sql">SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice) FROM Order o</code>
解决方案:
简洁高效的解决方案在 SELECT
语句中使用子查询:
<code class="language-sql">SELECT o.OrderId, (SELECT MAX(Price) FROM (VALUES (o.NegotiatedPrice), (o.SuggestedPrice)) AS AllPrices(Price)) AS MaxPrice FROM Order o</code>
这种方法有几个主要好处:
UNION
、PIVOT
或CASE
语句。NULL
值。MAX
函数可以替换为其他聚合函数(例如 MIN
、AVG
、SUM
)。VALUES
子句添加更多条目,可以轻松扩展以处理两列以上。 例如:<code class="language-sql">SELECT MAX(a), MAX(b), MAX(c) FROM (VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)) AS MyTable(a, b, c)</code>
在处理 SQL Server 中的多个列时,此方法提供了一种干净有效的方法来复制 .NET Math.Max
函数的行为。
以上是如何在 SQL Server 中复制 .NET 的 Math.Max 函数以实现多列?的详细内容。更多信息请关注PHP中文网其他相关文章!