sql >> Database >  >> RDS >> Sqlserver

Is er een Max-functie in SQL Server die twee waarden aanneemt, zoals Math.Max ​​in .NET?

Als u SQL Server 2008 (of hoger) gebruikt, dan is dit de betere oplossing:

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

Alle credits en stemmen moeten gaan naar Svens antwoord op een gerelateerde vraag, "SQL MAX van meerdere kolommen?"
Ik zeg dat dit het "beste antwoord is" " omdat:

  1. U hoeft uw code niet ingewikkeld te maken met UNION's, PIVOT's, UNPIVOT's, UDF's en waanzinnig lange CASE-verklaringen.
  2. Het wordt niet geplaagd door het probleem van het omgaan met nulls, het verwerkt ze prima.
  3. Het is gemakkelijk om de 'MAX' te verwisselen met 'MIN', 'AVG' of 'SUM'. U kunt elke aggregatiefunctie gebruiken om de aggregatie over veel verschillende kolommen te vinden.
  4. Je bent niet beperkt tot de namen die ik heb gebruikt (d.w.z. 'AllPrices' en 'Price'). Je kunt je eigen namen kiezen om het voor de volgende persoon gemakkelijker te lezen en te begrijpen.
  5. U kunt meerdere aggregaten vinden met behulp van afgeleide_tabellen van SQL Server 2008 als volgt:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MijnTabel(a, b)


  1. Uitvoeren van toestemming voor xp_cmdshell

  2. Problemen met contenttypes bij het laden van een fixture in Django

  3. Wat is het verschil tussen varchar en nvarchar?

  4. Een overzicht van ProxySQL-clustering in ClusterControl