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 :

Elimination des doublons selon la valeur d'un autre champ


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 58
    Points
    58
    Par défaut Elimination des doublons selon la valeur d'un autre champ
    Bonjour je voudrais selectionner un ensemble de données afin de n'avoir aucun doublons, je vous explique le pb. Voici la structure de mes données:

    ARTICLE_REF CODE_TARIF PRIX
    art1 targen 8
    art2 targen 15
    art2 taredf 14


    Je veux selectionner mes articles REF et je ne veux pas de doublons. Le soucis est le suivant:

    Seuls certains article ont 2 code tarifs, ce qui leur donnent 2 prix differents.
    J'arrive à faire une requete qui selectionne ce que vous voyez au dessus mais impossible de faire un filtre de choix sur le code_tarif.
    Je veux séléctionner les article_ref sans doublons, sachant que ceux qui n'ont qu'un code_tarif (qui sera toujours targen) soit pris en compte et que ceux qui ont 2 code tarif (targen et taredf), on prenne le art_ref correspondant au taredf mais pas au targen.

    Si qqun a une reponse, je suis preneur. MERCI !

  2. #2
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    peut-être que ceci peut faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select ARTICLE_REF, CODE_TARIF, PRIX 
    from Matable
    where CODE_TARIF = 'taredf'
         or ARTICLE_REF not in (select ARTICLE_REF from MaTable where 'CODE_TARIF = 'taredf')

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    C'est presque ca ! MERCI BEAUCOUP....

    Le soucis est qu'avec cette requete, je selectionne mon article_ref , soit en taredf soit en autre chose que taredf. Et il se trouve que j'ai des code targen, taredf, tartoto et bien d'autres. Le code targen existe toujours pour chaque article_ref. Je voudrais donc selectionner soit le targen pour un article_ref donné si le taredf n'existe pas pour cette article, soit le taredf si il l'est et eliminer les lignes contenant cet article_ref associé au targen, tartoto, ....

    Merci encore pour votre aide...

  4. #4
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Donc si je comprend bien il y a les 4 cas suivants :

    1- Uniquement targen
    2- targen, tardef
    3- targen, tardef, tartoto, ...
    4- targen, tartoto, ...

    Et il ne faut récupérer que les cas 1, 2 et 3 ??? Si oui, ceci devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select ARTICLE_REF, CODE_TARIF, PRIX 
    from Matable 
    where CODE_TARIF = 'taredf' 
         or ARTICLE_REF not in (select ARTICLE_REF from MaTable where CODE_TARIF <> 'targen')

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup, mais la requete est super lente maintenant. De plus, j'ai une notion de priorité, du genre, si ya un taredf, alors il est superieur sur le targen, si le taredf n'existe pas on prend le targen.

    y a t-il une difference entre

    not in (select ARTICLE_REF from MaTable where CODE_TARIF <> 'targen')

    et

    in (select ARTICLE_REF from MaTable where CODE_TARIF == 'targen')

    ?

    Le ou exclusif existe t-il en SQL ?


    Merci encore...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    du fait du comportement des NULL ou, il y a une différence.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Invité(e)
    Invité(e)
    Par défaut Re: Elimination des doublons selon la valeur d'un autre cham
    Citation Envoyé par pi05
    Bonjour je voudrais selectionner un ensemble de données afin de n'avoir aucun doublons, je vous explique le pb. Voici la structure de mes données:

    ARTICLE_REF CODE_TARIF PRIX
    art1 targen 8
    art2 targen 15
    art2 taredf 14


    Je veux selectionner mes articles REF et je ne veux pas de doublons. Le soucis est le suivant:

    Seuls certains article ont 2 code tarifs, ce qui leur donnent 2 prix differents.
    J'arrive à faire une requete qui selectionne ce que vous voyez au dessus mais impossible de faire un filtre de choix sur le code_tarif.
    Je veux séléctionner les article_ref sans doublons, sachant que ceux qui n'ont qu'un code_tarif (qui sera toujours targen) soit pris en compte et que ceux qui ont 2 code tarif (targen et taredf), on prenne le art_ref correspondant au taredf mais pas au targen.

    Si qqun a une reponse, je suis preneur. MERCI !
    un truc du style ....

    SELECT ARTICLE_REF CODE_TARIF PRIX FROM art a
    WHERE
    NOT EXISTS ( SELECT ARTICLE_REF CODE_TARIF PRIX FROM art b
    WHERE a.art = b.art AND a.prix > b.prix)

  8. #8
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par pi05
    Merci beaucoup, mais la requete est super lente maintenant. De plus, j'ai une notion de priorité, du genre, si ya un taredf, alors il est superieur sur le targen, si le taredf n'existe pas on prend le targen.

    y a t-il une difference entre

    not in (select ARTICLE_REF from MaTable where CODE_TARIF <> 'targen')

    et

    in (select ARTICLE_REF from MaTable where CODE_TARIF == 'targen')

    ?

    Le ou exclusif existe t-il en SQL ?


    Merci encore...
    En terme de performance, il peut y avoir de tres grandes differences
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 58
    Points
    58
    Par défaut
    Merci pour vos reponses, vous m'avez bien aiguillé ....

    Longue vie a Developpez.net...

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

Discussions similaires

  1. [AC-2003] Remplir un champ selon la valeur d'un autre champ
    Par jeanpierre67 dans le forum IHM
    Réponses: 2
    Dernier message: 31/07/2011, 17h55
  2. {VBA Excel} Colorier des cases selon la valeur dans une autre
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2008, 09h56
  3. Cacher un champ selon la valeur d'un autre champ
    Par pascale86 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/02/2007, 15h54
  4. Elimination des doublons
    Par amika dans le forum Requêtes
    Réponses: 8
    Dernier message: 05/11/2005, 09h28
  5. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27

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