J'ai une table MEMBRE donc chaque membre a un état (A=actif, D=Dormant, M= Moyen)
chaque membre passe par plusieurs états chaque jour
je veux afficher les membre qui sont passés par : A et jamais par D et M
J'ai une table MEMBRE donc chaque membre a un état (A=actif, D=Dormant, M= Moyen)
chaque membre passe par plusieurs états chaque jour
je veux afficher les membre qui sont passés par : A et jamais par D et M
Essayez ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select member_id, jour from membre where etat in ('A', 'D', 'M') group by member_id, jour having max(etat) = 'A' or (min(etat) = 'D' and max(etat) = 'M')
Non monsieur, je veux quand je fais select * from membre where membre_id = 1 il doit pas y avoir des ligne avec D et M et A, il doit y avoir que des D et M (membre non actif)
Pour les membres qui n'ont que l'état actif et jamais dormant ou moyens :
Pour les autres faire l'inverse dans le HAVING
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select membre , sum(case when etat = 'A' then 1 else 0 end) as etat_actif , sum(case when etat in ('D','M') then 1 else 0 end) as etat_dormant_moyens from table_membre group by membre having sum(case when etat = 'A' then 1 else 0 end) >= 1 and sum(case when etat in ('D','M') then 1 else 0 end) = 0
MERCI ça FONCTIONNE
Certes, mais vous avez modifié votre question plus de trente minutes après ma réponse.
Votre question initiale étant :
D'une part ce n'est pas correct envers moi qui ai pris le temps de répondre à votre question initiale, d'autre part ça perturbe la lisibilité du sujet.Envoyé par hzmedd
Vous auriez pu simplement répondre que votre question avait évolué.
Bref.
Partager