sql >> Databasteknik >  >> RDS >> Sqlserver

Finns det en Max-funktion i SQL Server som tar två värden som Math.Max ​​i .NET?

Om du använder SQL Server 2008 (eller senare) är detta den bättre lösningen:

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

All kredit och röster ska gå till Svens svar på en relaterad fråga, "SQL MAX av flera kolumner?"
Jag säger att det är det "bästa svaret " eftersom:

  1. Det kräver inte att du komplicerar din kod med UNION:s, PIVOT:s,UNPIVOT:s, UDF:s och galet långa CASE-uttalanden.
  2. Den plågas inte av problemet med att hantera nollor, den hanterar dem bra.
  3. Det är lätt att byta ut "MAX" mot "MIN", "AVG" eller "SUMMA". Du kan använda vilken aggregatfunktion som helst för att hitta aggregatet över många olika kolumner.
  4. Du är inte begränsad till namnen jag använde (dvs. "Alla priser" och "Pris"). Du kan välja dina egna namn för att göra det lättare att läsa och förstå för nästa kille.
  5. Du kan hitta flera aggregat med hjälp av SQL Server 2008:s härledda_tabeller så här:
    VÄLJ MAX(a), MAX(b) FROM (VÄRDEN (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)


  1. Hur man formaterar tal med ledande nollor i SQLite

  2. Unik begränsning med villkor i MYSQL

  3. PL/SQL otillräckliga privilegier inom en fråga manuellt möjligt

  4. Ställ in tidszon i PHP och MySQL