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 :

Filtre par groupe de données


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut Filtre par groupe de données
    Bonjour,

    Je souhaiterais faire un filtre afin de garder les groupes qui ont au moins une priorité = « prioritaire ».

    Pour exemple, J’ai le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Groupe        Priorité               Client
    Groupe 1     prioritaire           X1
    Groupe 1     normal                X2
    Groupe 1     faible                X3
    Groupe 1     normal                X4
    Groupe 1     faible                X5
    Groupe 1     normal                X6
    Groupe 1     normal                X7
    Groupe 2     normal                X8
    Groupe 2     faible                X9
    Groupe 2     normal                X10
    Groupe 2     faible                X11
    Groupe 2     normal                X12
    Groupe 3     prioritaire           X13
    Groupe 3     normal                X14
    Groupe 3     faible                X15
    Groupe 3     prioritaire           X16
    Groupe 3     normal                X17
    Groupe 3     faible                X18
    Et je voudrais obtenir le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Groupe        Priorité               Client
    Groupe 1     prioritaire           X1
    Groupe 1     normal                X2
    Groupe 1     faible                X3
    Groupe 1     normal                X4
    Groupe 1     faible                X5
    Groupe 1     normal                X6
    Groupe 1     normal                X7
    Groupe 3     prioritaire           X13
    Groupe 3     normal                X14
    Groupe 3     faible                X15
    Groupe 3     prioritaire           X16
    Groupe 3     normal                X17
    Groupe 3     faible                X18
    Sauriez-vous comment je pourrais réaliser une requête permettant d'effectuer ce type de filtre s'il vous plaît ?

  2. #2
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonsoir,

    Essayez avec EXISTS comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT groupe, priorité, client
    FROM laTable AS t1
    WHERE EXISTS (
      SELECT NULL
      FROM laTable AS t2
      WHERE t2.priorité = 'prioritaire'
        AND t2.groupe = t1.groupe
    )

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Ou alors dans le même esprit en utilisant une jointure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT groupe, priorité, client
    FROM laTable AS t1
    inner join	(
    		  SELECT t2.groupe
    		  FROM laTable AS t2
    		  WHERE t2.priorité = 'prioritaire'    
    		) G 
    on  G.groupe = G.groupe;
    A+
    Soazig

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut
    Bonjour, et merci de vos réponses !
    Cependant, j'ai un petit soucis lorsque j'exécute vos requêtes :

    Oishiii lorsque j'applique la requête, j'ai un message d'erreur en retour qui est le suivant : "ERREUR: Les colonnes suivantes n'ont pas été trouvées dans les tables : NULL."

    soazig, j'ai l'impression que la requête retourne un produit cartésien, car j'ai 608 lignes à l'origine, et après exécution de la requête j'en obtiens 247000... En toute logique, je devrais en avoir moins une fois le filtre réalisé...

  5. #5
    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 388
    Points
    18 388
    Par défaut
    Il manque un distinct dans la sous-requête de soazig.
    Distinct pas nécessaire si vous passez par une sous-requête avec un IN.

    La requête d'Oishiiii devrait fonctionner, quel est votre SGBD qui ne connait pas NULL ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    j'utilise un proc SQL sous SAS

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    J'ai en fait pensé à une requête qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    proc SQL;
    create table TABLE as
    SELECT *
    FROM ma_table AS t1
    where t1.groupe IN (
              SELECT t2.groupe
              FROM ma_table AS t2
              WHERE t2.priorité = 'prioritaire'
              AND t1.groupe = t2.groupe
            );
    quit;
    Merci de votre aide

    A bientôt

  8. #8
    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 388
    Points
    18 388
    Par défaut
    Pas besoin de jointure avec le IN, puisque vous cherchez à créer une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM ma_table
     WHERE groupe IN (SELECT groupe
                        FROM ma_table
                       WHERE priorité = 'prioritaire');
    Cette requête suppose que groupe ne peut pas être null.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    bien vu Waldar.
    ça m'apprendra à poster à peine sortie du lit. Je le sais pourtant que je ne suis pas du matin.
    Comme dit par waldar j'aurais du écrire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT groupe, priorité, client
    FROM laTable AS t1
    INNER JOIN	(
    		  SELECT distinct t2.groupe
    		  FROM laTable AS t2
    		  WHERE t2.priorité = 'prioritaire'    
    		) G 
    ON  G.groupe = G.groupe;
    Désolée tibs
    Soazig

Discussions similaires

  1. Filtre et groupe des données selon les utilisateurs.
    Par malumiere dans le forum W4 Express
    Réponses: 0
    Dernier message: 02/01/2014, 19h01
  2. [AC-2013] filtre par groupe d'options sur un formulaire
    Par abdoudiaw dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/09/2013, 16h27
  3. [AC-2003] Filtre zone de liste par groupe d'option
    Par HE dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/07/2009, 17h18
  4. filtres par groupe
    Par mykette dans le forum Excel
    Réponses: 10
    Dernier message: 11/10/2007, 13h50

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