Aide SQL

cs_sabrina7 Messages postés 26 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 25 mars 2007 - 1 mars 2006 à 18:46
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 3 mars 2006 à 20:37
Bonjour


J'ai besoin que quelqu'un m'aide pour compléter ma requête SQL. A partir de 2 champs je calcule le taux.


SELECT Table1.Nombre, Table1.Compte, [Nombre]/[Compte]*100 AS Taux
FROM Table1;


Voici le résultat de ma requete:


Nombre Compte Taux
1 5 20
5
2 5 40


J'amerai que pour la 2ème ligne il y ait la valeur 0 qui s'affiche comme résultat dans la colonne taux (un zero par défaut pour le taux de la 2ème ligne étant donnée qu'il n'y a pas de valeur pour le champ nombre de la deuxièùe ligne).


Merci
Sabrina

8 réponses

Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
1 mars 2006 à 19:43
Salut,

Il faudrait dire quel SGBD tu utilises pour qu'on puisse te répondre efficacement.
Mais sinon sur SQL Serveur il suffit de faire isnull([Nombre]/[Compte]*100,0) AS Taux
Sur Access il faut passer par un iif : iif(isnull([Nombre]/[Compte]*100;0;[Nombre]/[Compte]*100) AS Taux
0
Neow26 Messages postés 50 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 mai 2007
1 mars 2006 à 19:46
J'ai fait une erreur sur ma réponse précédente, pour Access il faut faire :
iif(isnull([Nombre]/[Compte]*100);0;[Nombre]/[Compte]*100) AS Taux
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 mars 2006 à 20:12
Salut


- Si tu n'as qu'une table, pas la peine de le préciser devant le nom des champs
- Si le nom du champ n'a rien de spécial (pas d'accent ni d'espaces), pas la peine de mettre de crochets [ ]
- Pour palier au problème des divisions par Null (et non pas le résultat Null), il suffit de conditionner la requète :
Select Nombre, Compte, Nombre / Compte * 100 As Taux
From Table1
Where Compte is not null

Ca devrait régler le problème

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
1 mars 2006 à 20:35
Salut,

Dans une requete SQL sur une base Access à partir de vb6, la fonction iif() ne fonctionne pas. Je ne crois pas que ça fonctionne avec d'autres bases de données.

Etant donné que tes champs nombre et compte doivent être forcément numériques (puisque tu dois faire des calculs avec), ils doivent avoir une valeur par défaut = 0 donc pas de problème.

Si ce n'est pas le cas, je t'engage à modifier le type et les valeurs par défaut de tes champs.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sabrina7 Messages postés 26 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 25 mars 2007 1
2 mars 2006 à 11:46
Bonjour, merci pour votre aide.
Donc désolé de ne pas l'avoir précisé mais je travaille sur la merveilleuse SQBG Access lol !!!!!


Donc la 2ème requêtes de Neow26 fonctionne bien sur Access, merci
Merci a toi Jack pour ces précisions. Il est vrai que de conditionner la requête, ce la peut m'eviter le problème
Et merci a toi CanisLupus mais le problème c'est que je ne peux pas mettre une valeur de champ par défaut car c'est une table importé. En plus j'aurai le risque apres d'avoir des calculs comme 0/0 donc pas tres pratique voila.
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
2 mars 2006 à 20:53
Sabrina7 > Heureux que tu aies trouver ta solution.

Seulement, pour ceux qui cherchent comme toi et pour moi aussi qui n'ai jamais vu une fonction iif dans une requete SQL, peux tu préciser la version de ta base Access (97, 200x, ...), à partir de quel langage (vba, vb6, vb.net, ...) la méthode d'accès (DAO, ADO, ...), et le code qui fonctionne ?

Personnellement, j'ai testé dans les conditions de mon précédent post et ça ne donne que des erreurs de syntaxe.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_sabrina7 Messages postés 26 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 25 mars 2007 1
3 mars 2006 à 13:26
J'utilise une base Access version 2000. Pour le language et la méthode d'accès ?????



Je vais replacer dans mon contexte car la requête SQL est un peu plus complète
J'ai une table qui s'appelle EI est qui est comme ci-dessous:


Numéro Mois Décision
1 Janvier X
2 Janvier
3 Février
4 Mars X
5 Mars X


Décision est une case à cocher


J'ai une table Mois


Numéro_mois Nom_mois
1 Janvier
...jusqu'a septembre



J'ai ma requête comme ci-dessous qui replacée dans son contexte est un peu plus évolué:


SELECT Mois.Nom_mois, (Select Sum(IIf(Décision=True,1)) from EI where EI.Mois=Mois.Nom_Mois) AS Nombre, (select count(Décision) from EI) AS Compte, IIf(IsNull([Nombre]/[Compte]*100),0,[Nombre]/[Compte]*100) AS Taux
FROM Mois;


Voila le résultat de ma requête:


Nom_mois Nombre Compte Taux
Janvier 1 5 20
Février 5 0
Mars 2 5 40
Avril 5 0
Mai 5 0
Juin 5 0
Juillet 5 0
Aout 5 0
Septembre 5 0


Compte me permet de compter le nombre d'enregistrement du champ Décision de la table EI
Nombre compte le nombre de case coché. Qaund une case est coché elle prend la valeur 1 donc je fais une somme du nombre de case à cocher.
Il n'apparait de valeur O dans nombre ce qui me permet d'éviter le cas ou compte serai égal à 0 d'avoir une division 0/0 donc erreur !!!!!
Taux est par défaut égal à 0
J'utilise bien une fonction IIf dans ma requête SQL et cela marche correctment.

Sinon j'ai fait un post concernant ODBC pour relier Access à Mysql mais j'ai pas de réponse. Est-ce que tu as une idée pour mon problème . Le lien ce trouve ci-dessous.

http://www.vbfrance.com/infomsg/LIEN-ACCESS-MYSQL-ODBC-0_677054.aspx
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
3 mars 2006 à 20:37
OK, je comprend mieux. C'est donc du pur Access 2000 (donc VBA pour le langage de tes modules).
Pour ta question sur ODBC, je n'ai pas la réponse tout de suite. Si je la trouve, je la posterai sur le topic qui la concerne.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous