SQL Server 2008(またはそれ以降)を使用している場合は、これがより適切なソリューションです:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
すべてのクレジットと投票は、関連する質問「複数の列のSQL MAX?」に対するSvenの回答に進む必要があります。
これは「ベストアンサー」だと思います。 "理由:
- コードをUNION、PIVOT、UNPIVOT、UDF、およびクレイジーな長いCASEステートメントで複雑にする必要はありません。
- nullの処理の問題に悩まされることはなく、nullを適切に処理します。
- 「MAX」を「MIN」、「AVG」、または「SUM」と簡単に交換できます。任意の集計関数を使用して、さまざまな列の集計を見つけることができます。
- 私が使用した名前(つまり、「AllPrices」と「Price」)に限定されません。自分の名前を選んで、次の人が読みやすく理解しやすいようにすることができます。
- SQL Server 2008のderived_tablesを使用して、次のように複数の集計を見つけることができます。
SELECT MAX(a)、MAX(b)FROM(VALUES(1、2)、(3、4)、(5、6) 、(7、8)、(9、10))AS MyTable(a、b)