cs_scm
Messages postés35Date d'inscriptionsamedi 14 mars 2009StatutMembreDernière intervention22 mars 2011
-
9 avril 2010 à 21:16
cs_scm
Messages postés35Date d'inscriptionsamedi 14 mars 2009StatutMembreDernière intervention22 mars 2011
-
11 avril 2010 à 19:38
Bonjour à tous
Je suis coincé, j'ai une table contenant plusieurs champs et je souhaiterai compter le nombre d'enregistrements d'un champs mais à une condition qu'il me compte uniquement les champs contenant l'enregistrement O
Voici l'exmeple :
La table : Matable
Les champs : Qte,Lu,Ma,Me,Je,Ve
Dans les champs Lu,Ma,Me,Je,Ve contiennent uniquement une lettre O ou N
Je souhaiterai que ma requete compte uniquement si Lu,Ma,Me,Je,Ve est à O
Voici ma requete : Select Qte,Lu,Ma,Me,Je,Ve,count(Qte) as Nb group by(qte);
Et là j'ai un regroupement de tout le champs Lu par exemple donc O et N, dans le champs Lu j'ai par exemple 2 N et 4 O dans le count j'ai 6 au lieu de 4.
Je pense qu'il faut faire des case ou des if mais je ne sais pas comment faire
Merci de votre aide
cs_scm
Messages postés35Date d'inscriptionsamedi 14 mars 2009StatutMembreDernière intervention22 mars 2011 10 avril 2010 à 18:29
Merci Julien pour ta réponse, je vais faire comme tu m'as dit, j'avais déjà essayé avec les AND
c'est à dire : select * from matable count(qte) as NB Where lu='O' and Ma='O' and Me='O' and Je='O' and Ve='O' group by qte
Je n'avais pas eu le resultat attendu.
Autre solution ?
cs_scm
Messages postés35Date d'inscriptionsamedi 14 mars 2009StatutMembreDernière intervention22 mars 2011 10 avril 2010 à 20:43
Merci Julien pour ta disponibilité
Au fait je ne peux m'en passer de Group By, car j'ai un count et un Sum dans la requete.
Voici ce que j'attends de ma requete :
Matable
Lu,Ma,Me,Qte,Heure
Ma requete :
Select Lu,Ma,Me,Je,Count(heure) as NB,sum(Qte) as NB1 group by heure.
Les champs Lu,Ma,Me comporte que deux caractères 'O' ou 'N'
Je souhaiterai qu'il me fasse le count que des champs contenant 'O' car quand je fais ma requete comme ci-haut j'ai un resultat me comptant tout 'O' et 'N' par exemple :
Lu Ma Me Je
O N N O
O N N O
N O N O
J'aimerai que mon count me donne : Lu =2, Ma=1, Me=0, Je=3
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020369 11 avril 2010 à 07:50
Ha alors c'est bien différent de ce que je pensais, en fait le WHERE va exclure toutes les lignes qui n'ont pas que des O conclusion, une seule ligne selectionnee meme avec le group by
(SELECT COUNT(*) as resLu
FROM matable
WHERE Lu='O')
UNION ALL
(SELECT COUNT(*) as resMa
FROM matable
WHERE Ma='O')
Et ainsi de suite pour tous les jours
Ca je pense que ca devrait marcher.
Je ne sais pas quelles sont tes contraintes, mais si j'étais à ta place, je coderais putot les O/N par 0/1, ce qui présente plusieurs avantages : une base plus légère, en effet, un entier 0 ou 1 est codé sur 1 bit alors que le O/N est codé sur au moins 5 bit.
Et en plus, ca simplifie tes requêtes, dans le cas présent, tu n'aurais eu qu'à écrire
SELECT COUNT(*) - SUM(Lu), COUNT(*) - SUM(Ma)
FROM maTable
cs_scm
Messages postés35Date d'inscriptionsamedi 14 mars 2009StatutMembreDernière intervention22 mars 2011 11 avril 2010 à 10:51
Merci encore une fois pour ta réponse
Je ne cherche pas à compter le nombre de jours, je veux compter le nombre de fois que le même horaire apparait dans un champs nommé heure mais à condition que dans les autres champs lu,Ma,Me,Je qu'il m'exclu la valeur 'N' contenu dans ces champs, en gros que la requete me regroupe et me compte uniquement si les champs : Lu,Ma,Me,Je sont à 'O'
Exemple :
Lu Ma Me Heure Qte
O N O 07:30 2
N N N 06:00 2
O O N 07:30 1
O N N 06:00 3
Je souhaiterai avoir comme resultat groupé des heures par exemple :
Lu Ma Me Heure Qte
2 0 1 07:30 3
1 0 0 06:00 5