sql >> Database teknologi >  >> RDS >> Sqlserver

Er der en Max-funktion i SQL Server, der tager to værdier som Math.Max ​​i .NET?

Hvis du bruger SQL Server 2008 (eller nyere), så er dette den bedre løsning:

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

Al kredit og stemmer skal gå til Svens svar på et relateret spørgsmål, "SQL MAX af flere kolonner?"
Jeg siger, det er det "bedste svar " fordi:

  1. Det kræver ikke, at du komplicerer din kode med UNION's, PIVOT's,UNPIVOT's, UDF'er og vanvittigt lange CASE-udsagn.
  2. Det er ikke plaget af problemet med at håndtere nuller, det håndterer dem fint.
  3. Det er nemt at udskifte "MAX" med "MIN", "AVG" eller "SUM". Du kan bruge en hvilken som helst aggregatfunktion til at finde aggregatet over mange forskellige kolonner.
  4. Du er ikke begrænset til de navne, jeg brugte (dvs. "AllPrices" og "Price"). Du kan vælge dine egne navne for at gøre det nemmere at læse og forstå for den næste fyr.
  5. Du kan finde flere aggregater ved hjælp af SQL Server 2008's afledte_tabeller som sådan:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)


  1. Migrering af en Oracle-database fra AWS EC2 til AWS RDS, del 4

  2. Sådan returneres en liste over datatyper i SQL Server (T-SQL)

  3. Få den aktuelle tidszone for serveren i SQL Server (T-SQL)

  4. Sådan fungerer PI() i MariaDB