SQL Server には、.NET の Math.Max のように 2 つの値を取る Max 関数がありますか? 質問する

SQL Server には、.NET の Math.Max のように 2 つの値を取る Max 関数がありますか? 質問する

次のようなクエリを書きたいと思います。

SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice)
FROM Order o

しかし、これはMAX関数の動作方法ではありませんよね? これは集計関数なので、単一のパラメータを想定し、すべての行の最大値を返します。

私のやり方でやる方法を誰か知っていますか?

ベストアンサー1

SQL Server 2008 (またはそれ以降) を使用している場合は、次の解決策の方が適しています。

SELECT o.OrderId,
       (SELECT MAX(Price)
        FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o

すべての功績と投票は関連する質問「複数列の SQL MAX?」に対する Sven の回答。
私がこれを「最良の答え」だと言うのは、以下の理由からです:

  1. UNION、PIVOT、UNPIVOT、UDF、そして非常に長い CASE ステートメントでコードを複雑にする必要はありません。
  2. null の処理に関する問題に悩まされることはなく、問題なく処理されます。
  3. 「MAX」を「MIN」、「AVG」、または「SUM」に置き換えるのは簡単です。任意の集計関数を使用して、さまざまな列の集計を見つけることができます。
  4. 私が使用した名前(「AllPrices」や「Price」など)に限定されるわけではありません。次の人が読みやすく理解しやすいように、独自の名前を選ぶこともできます。
  5. SQL Server 2008の派生テーブル次のようにします:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b)

おすすめ記事