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 :

Requête pour filtrer des produits en fonction de leurs composants


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Requête pour filtrer des produits en fonction de leurs composants
    Bonjour,

    J'ai une table BomRange qui contient les champs suivants:
    FinishedItemCode
    FinishedAdditionalItemCode
    ComponentCode
    AdditionalComponentCode

    Pour un même produit fini je peux avoir plusieurs lignes du style:

    FinishedItemCode FinishedAdditionalItemCode ComponentCode AdditionalComponentCode
    ARTICLE1 BLANC PROFIL1 BLANC
    ARTICLE1 BLANC COMPO1 BLANC
    ARTICLE1 BLANC COMPO2 BLANC
    ARTICLE2 BLANC PROFIL2 BLANC
    ARTICLE2 BLANC COMPO1 BLANC
    ARTICLE2 BLANC COMPO3 BLANC
    ARTICLE3 BLANC PROFIL2 BLANC
    ARTICLE3 BLANC COMPO3 BLANC
    ARTICLE3 BLANC COMPO1 BLANC
    ARTICLE4 BLANC PROFIL1 BLANC
    ARTICLE4 BLANC COMPO1 BLANC
    ARTICLE4 BLANC COMPO3 BLANC

    Je cherche donc tous les articles qui contiennent des composants identiques: exemple PROFIL1 et COMPO1 me retournera ARTICLE1 et ARTICLE4.

    J'ai testé une requête de style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT FinishedItemCode, FinishedAdditionalItemCode FROM Production.BomRange WHERE ((ComponentCode='xxx' and AdditionalComponentCode='xxx')
    or (ComponentCode='yyy' and AdditionalComponentCode='yyy')
    or (ComponentCode='zzz' and AdditionalComponentCode='zzz')
    )
    mais cette requête n'est pas bonne.

    Une suggestion pour me diriger vers la bonne solution?.
    Xavier

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Quelle est ta BDD et sa version?

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    SQL Server 2016
    Xavier

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SELECT FinishedItemCode, FinishedAdditionalItemCode
        FROM Production.BomRange
       WHERE ComponentCode in ('PROFIL1', 'COMPO1')
    GROUP BY FinishedItemCode, FinishedAdditionalItemCode
      HAVING count(distinct ComponentCode) = 2;

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    MErci beaucoup

    Donc si je veux aller plus loin et comparer 3 lignes composants en tenant compte de l'additionalcomponentcode, est-ce que ceci convient?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT FinishedItemCode, FinishedAdditionalItemCode
        FROM Production.BomRange
       WHERE ComponentCode in ('DI2830', 'DI2841', 'E418M4X10') and AdditionalComponentCode in ('NEW', 'NEW', '')
    GROUP BY FinishedItemCode, FinishedAdditionalItemCode
      HAVING count(distinct ComponentCode) = 3;
    Xavier

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      select FinishedItemCode, FinishedAdditionalItemCode
        from Production.BomRange
       where (ComponentCode = 'DI2830'    and AdditionalComponentCode = 'NEW')
          or (ComponentCode = 'DI2841'    and AdditionalComponentCode = 'NEW')
          or (ComponentCode = 'E418M4X10' and AdditionalComponentCode = ''   )
    group by FinishedItemCode, FinishedAdditionalItemCode
      having count(distinct ComponentCode + '£^*' + AdditionalComponentCode) = 3;

  7. #7
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    merci beaucoup pour l'aide! C'est cool

    Bonne journée
    Xavier

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      select FinishedItemCode, FinishedAdditionalItemCode
        from Production.BomRange
       where (ComponentCode = 'DI2830'    and AdditionalComponentCode = 'NEW')
          or (ComponentCode = 'DI2841'    and AdditionalComponentCode = 'NEW')
          or (ComponentCode = 'E418M4X10' and AdditionalComponentCode = ''   )
    group by FinishedItemCode, FinishedAdditionalItemCode
      having count(distinct ComponentCode + '£^*' + AdditionalComponentCode) = 3;
    Si j'ai bien compris la requête doit retourner les articles ayant les mêmes composants sélectionnés, mais si un seul article a les composants il sera retourné, et ce n'est pas ce qui est voulu si?

  9. #9
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    La requête doit renvoyer les produits finis qui ont les composants listés
    Xavier

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Ok, ça change de ce que tu as dit au début :

    Je cherche donc tous les articles qui contiennent des composants identiques: exemple PROFIL1 et COMPO1 me retournera ARTICLE1 et ARTICLE4.

  11. #11
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    exact, je me suis compris, mais c'était pas clair.
    Xavier

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

Discussions similaires

  1. [2012] Requête pour trouver des produits qui ne sont pas dans une table ?
    Par zoocoral dans le forum Développement
    Réponses: 5
    Dernier message: 12/01/2017, 17h11
  2. [XL-2013] Macro pour déplacer des cellules en fonction de leur mise en forme
    Par gregory.d dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/04/2016, 12h16
  3. Réponses: 5
    Dernier message: 14/03/2010, 21h50
  4. Requête pour filtrer des données
    Par altecad dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/02/2008, 14h16
  5. Idée pour sélectionner des produits et les ajouter
    Par Nulenprogra dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/02/2007, 11h34

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