Simulation de Math.Max de .NET dans SQL Server pour plusieurs colonnes
La fonction MAX
de SQL Server fonctionne généralement sur une seule colonne, renvoyant la valeur la plus élevée dans cette colonne. Cependant, la mise en miroir des fonctionnalités de Math.Max
de .NET, qui compare plusieurs valeurs, nécessite une approche différente dans SQL Server.
Ceci est facilement réalisé dans SQL Server 2008 et les versions ultérieures. Illustrons avec un exemple :
Le défi :
Vous avez besoin d'une requête qui identifie la plus grande valeur entre les colonnes NegotiatedPrice
et SuggestedPrice
dans une table Order
pour chaque ligne. Une tentative naïve comme celle-ci ne fonctionnera pas :
<code class="language-sql">SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice) FROM Order o</code>
La solution :
Une solution concise et efficace utilise une sous-requête dans l'instruction SELECT
:
<code class="language-sql">SELECT o.OrderId, (SELECT MAX(Price) FROM (VALUES (o.NegotiatedPrice), (o.SuggestedPrice)) AS AllPrices(Price)) AS MaxPrice FROM Order o</code>
Cette approche offre plusieurs avantages clés :
UNION
, PIVOT
ou CASE
.NULL
.MAX
peut être remplacée par d'autres fonctions d'agrégation (par exemple, MIN
, AVG
, SUM
).VALUES
dans la sous-requête. Par exemple :<code class="language-sql">SELECT MAX(a), MAX(b), MAX(c) FROM (VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)) AS MyTable(a, b, c)</code>
Cette méthode fournit un moyen propre et efficace de reproduire le comportement de la fonction Math.Max
de .NET lorsque vous travaillez avec plusieurs colonnes dans SQL Server.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!