Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt es eine Max-Funktion in SQL Server, die zwei Werte wie Math.Max ​​in .NET annimmt?

Wenn Sie SQL Server 2008 (oder höher) verwenden, ist dies die bessere Lösung:

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

Alle Anerkennung und Stimmen sollten an Svens Antwort auf eine verwandte Frage gehen:"SQL MAX von mehreren Spalten?"
Ich sage, es ist die "beste Antwort " weil:

  1. Es ist nicht erforderlich, Ihren Code mit UNIONs, PIVOTs,UNPIVOTs, UDFs und wahnsinnig langen CASE-Anweisungen zu verkomplizieren.
  2. Es ist nicht mit dem Problem der Handhabung von Nullen geplagt, es handhabt sie ganz gut.
  3. Es ist einfach, „MAX“ durch „MIN“, „AVG“ oder „SUM“ zu ersetzen. Sie können jede Aggregatfunktion verwenden, um das Aggregat über viele verschiedene Spalten hinweg zu finden.
  4. Sie sind nicht auf die Namen beschränkt, die ich verwendet habe (d. h. "AllPrices" und "Price"). Sie können Ihre eigenen Namen auswählen, um sie für den nächsten Mann leichter lesbar und verständlich zu machen.
  5. Sie können mehrere Aggregate finden, indem Sie die abgeleiteten_Tabellen von SQL Server 2008 wie folgt verwenden:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)