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
句にエントリを追加することで、3 つ以上の列を処理できるように簡単に拡張できます。 例:<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 中国語 Web サイトの他の関連記事を参照してください。