IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

faire 2 requetes sur la meme table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Points : 61
    Points
    61
    Par défaut faire 2 requetes sur la meme table
    Bonjour,

    J'aimerai faire 2 requetes sur la meme table.
    Je l'ai ai faites d'abord séprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT id_dossier, count(id_utilisateur)as nbre
    FROM dossier_intervenants
    WHERE dossier_intervenants.role = 'gof_DEV'  
    GROUP BY id_dossier
    HAVING nbre>=2
     
    ----------------------------------------
    SELECT id_dossier,count(id_utilisateur)as nbre_termine
    FROM dossier_intervenants
    WHERE dossier_intervenants.role = 'gof_DEV'  
    AND dossier_intervenants.date_fin_interventions is NOT NULL
    GROUP BY id_dossier
    HAVING nbre_termine<=1
    Je voudrais réunir les 2 comment puis je faire?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    tu peux faire utiliser l'operareur Union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT id_dossier, count(id_utilisateur)as nbre
    From dossier_intervenants
    WHERE dossier_intervenants.role = 'gof_DEV'  
    GROUP BY id_dossier
    HAVING nbre>=2
    UNION
    SELECT id_dossier,count(id_utilisateur)as nbre_termine
    FROM dossier_intervenants
    WHERE dossier_intervenants.role = 'gof_DEV'  
    AND dossier_intervenants.date_fin_interventions is NOT NULL
    GROUP BY id_dossier
    HAVING nbre_termine<=1
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Le probleme est que je souhaite que toutes les conditions soit prise en compte est la c'est pas le cas. Il me donne les dossiers qui prenne soit une conditions soit l'autre

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Vous pouvez commencer par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        id_dossier,
        count(id_utilisateur) AS nbre,
        sum(case when date_fin_interventions IS NOT NULL then 1 else 0 end) AS nbre_termine
    FROM
        dossier_intervenants
    WHERE
        role = 'gof_DEV'
    GROUP BY
        id_dossier
    Il reste les having à gérer mais je ne suis pas sûr d'avoir compris l'ensemble de votre problème.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Le but est de garder les dossiers où il y a plus de d'une personne ayant le role dev mais aussi qu'il y en ai au mois eu qui est mis fin aux interventions (date_fin_dev not null)

    Est ce que l'on peut mettre 2 having dans la meme requete ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    J'ai trouvé la solution :

    La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id_dossier,count(id_utilisateur) AS nbre,sum(case when date_fin_interventions IS NOT NULL then 1 else 0 end) AS nbre_termine
    FROM dossier_intervenants
    WHERE role = 'gof_DEV'
    GROUP BY id_dossier
    HAVING nbre>=2
    AND nbre_termine>=1
    AND nbre_termine<nbre");
    Merci beaucoup pour votre aide

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    c'est plutôt ceci qu'il te faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT id_dossier, count(id_utilisateur)AS nbre
    FROM dossier_intervenants
    WHERE dossier_intervenants.role = 'gof_DEV'  
    and Exists (SELECT count(id_utilisateur)
                   FROM dossier_intervenants dos
                   WHERE dos.id_dossier=dossier_intervenants.id_dossier 
                   AND dos.date_fin_interventions IS NOT NULL
                   HAVING count(id_utilisateur)<=1
                  )
    GROUP BY id_dossier
    HAVING nbre>=2
    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Je le voyais comme ca au départ mais je ne s'avais pas qu'il fallais utiliser EXISTS !!!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sous requete sur la meme table
    Par ricault dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/05/2007, 19h40
  2. 2 requete sur une meme table en une seule
    Par Nizarazu dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/08/2006, 22h03
  3. DOUBLE REQUETE SUR UNE MEME TABLE
    Par MORAS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2006, 14h40
  4. Requete sur la meme table
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2005, 10h59
  5. Réponses: 2
    Dernier message: 07/07/2005, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo