cs_sabrina7
Messages postés26Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention25 mars 2007
-
1 mars 2006 à 18:46
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 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).
Neow26
Messages postés50Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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 !?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_sabrina7
Messages postés26Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention25 mars 20071 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.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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 !?
cs_sabrina7
Messages postés26Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention25 mars 20071 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.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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 !?