Dans T-SQL, vous pouvez faire ceci:
SELECT ProductId, COALESCE(Price, 0)
FROM Products
Comment faites-vous la même chose dans Access SQL? Je vois des exemples pour le faire avec Nz dans VBA, mais je cherche l'équivalent SQL.
Merci.
Access prend en charge la fonction Nz et vous permet de l'utiliser dans une requête. Notez cependant que Nz est identique à la fonction T-SQL ISNULL. Il ne peut pas accepter un nombre arbitraire de paramètres comme COALESCE.
S'il se trouve dans une requête Access, vous pouvez essayer ceci:
"Price = IIf([Price] Is Null,0,[Price])"
On dirait que je peux simplement utiliser:
SELECT ProductId, Nz(Price, 0)
FROM Products
Semble fonctionner très bien.
L'utilisation de Iif(Price is null, 0, Price)
devrait vous donner les meilleures performances (voir Astuces de performance d'Allen Browne ). Cependant, SQL Server Coalesce()
a le grand avantage sur Iif()
et Nz()
qu'il peut gérer plusieurs paramètres en cascade. J'ai donc créé cet équivalent VBA rapide:
Function Coalesce(ParamArray varValues()) As Variant
'returns the first non null value, similar to SQL Server Coalesce() function
'Patrick Honorez --- www.idevlop.com
Dim i As Integer
Coalesce = Null
For i = LBound(varValues) To UBound(varValues)
If Not IsNull(varValues(i)) Then
Coalesce = varValues(i)
Exit Function
End If
Next
End Function
L'utilisation de IsNull()
, Nz()
et les fonctions de conversion de données sont des fonctions VBA intégrées et ne ralentiront vos requêtes que dans les versions antérieures à 2003. Pour le typage des données, utilisez la fonction CCur()
pour garantir votre type de données, mais uniquement si vous devez effectuer des comparaisons solides ou simplement définir la propriété format sur Devise dans la colonne. C'est l'instruction IF qui ralentit le plus les choses, car elle ajoute encore une autre fonction à votre routine
en utilisant cette solution: Nz([Price], CCur(0))
le seul moment où CCur()
s'exécutera, c'est lorsque Price Is Null, donc dans l'ensemble c'est probablement le plus rapide.
Le fait est que le moins de fonctions totales utilisées, plus vos requêtes s'exécuteront rapidement.