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

Requêtes et SQL. Discussion :

Suppression lignes identiques selon critères


Sujet :

Requêtes et SQL.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut Suppression lignes identiques selon critères
    Bonjour,

    Dans mon application j'ai une table avec les enregistrements ci-dessous.

    L Article Poste DateMax Supprimé
    1 Voiture A 01/01/2010
    2 Voiture B 01/01/2010
    3 Voiture C 15/04/2011
    4 Voiture C 15/04/2011 OUI
    5 Voiture D 01/01/2010


    Je cherche vainement à créer une requête pour exclure les lignes 3 et 4
    car elles correspondent aux critères suivants.

    Même Article
    Même Poste
    Même DateMAx
    et que l'une d'entre elles est "flagée" comme supprimée.

    D'avance merci pour votre aide

    StSym

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonsoir,
    Ca ressemble à cette file : http://www.developpez.net/forums/d10...aire-doublons/

    Tu peux utiliser une syntaxe du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from matable t
    where dcount("*","matable","supprimé and article='" & t.article & "' and poste='"  t.poste & "' and datemax=" & t.datemax)>=1
    Attention aux ' et "
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonsoir

    Merci pour ta réponse.
    Par contre j'avoue ne pas savoir si tu considères que ma table est nommée
    "Matable" ou "t".

    J'ai essayé le code suivant en nommant la table "Matable"mais il ne supprime pas les doublons.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE *
    FROM Matable
    WHERE dcount("*","Matable","supprimé and article='" & Matable.article & "' and poste='" & Matable.poste & "' and datemax=" & Matable.datemax)>=1;

    Merci
    StSym

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Comme la requete interroge 2 fois la même table, j'ai mis l'alias t au 1er appel pour que l'interpréteur puisse les distinguer

    Ceci dit avec dcount je ne suis pas sûr que ce soit nécessaire... Je suis donc surpris que ça ne marche pas

    Essaie pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from matable t
    where dcount("*","matable","supprimé and article='" & t.article & "' and poste='"  t.poste & "' and datemax=" & t.datemax)>=1
    et modifie les conditions du dcount pour voir ce qui se passe...

    supprimé est bien un booléen ? par précaution je ne mets jamais d'accents ni d'espace dans mes variables !
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour Nico84
    Merci pour ton message.
    J'ai essayé ton code en ajoutant une esperluette devant le dernier "t.poste".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM matable AS t
    WHERE dcount("*","matable","supprimé and article='" & t.article & "' and poste='"  &t.poste & "' and datemax=" & t.datemax)>=1;
    La réquète fonctionne mais ne retourne pas la ligne 3 et 4 comme doublons selon les critères définis.
    J'ai modifié les conditions (en fonction de mes connaissances) mais n'arrive pas au résultat souhaité.
    J'ai aussi essayé la condition >=2 car pour moi elle correspond ( peut-être à tort) à des doublons.
    Que nenni !La requète est toujours vide.
    Tu demandes si "Supprimé" est booléen.
    Dans la table "Matable" ce champ est de type "texte".
    J'espère avoir bien présenté mon problème car ce qui me gène , c'est que pour toi le résultat est évident.

    Encore merci pour ton aide.
    StSym

  6. #6
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Ne serait-ce pas un problème avec les champs de type DATE/TIME?
    Essayez de convertir vos champs datemax sous la forme (DD/MM/YYYY) avec la fonction DATEPART par exemple.
    Quelque chose de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM matable AS t
    WHERE dcount("*","matable","supprimé and article='" & t.article & "' and poste='"  &t.poste & "' and'" & DATEPART("DD/MM/YYYY",datemax)"'=" & DATEPART("DD/MM/YYYY",t.datemax))>=1;
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonsoir Carden752,
    Merci pour votre solution.
    J'ai essayé de la "bidouiller" mais elle aussi ne permet d'avoir le résultat souhaité.
    Encore merci pour votre aide

  8. #8
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonsoir,

    une autre solution serait d'utiliser la clause exists.
    Peut-être quelque chose de ce style pourrait convenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from MaTable as t
    where exists (select * from MaTable where article=t.article and poste=t.poste and N°<>t.N° and datemax=t.datemax and (supprime='OUI' or t.supprime='OUI'));
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  9. #9
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Exact il manquait un & devant t.poste
    Dans la table "Matable" ce champ est de type "texte".


    Il faut dans ce cas tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    supprimé='OUI' and ...
    Idem le champ datemax est bien déclaré comme date ??? Si c'est une chaine il faut l'encadrer par des '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from matable t
    where dcount("*","matable","supprimé='OUI' and article='" & t.article & "' and poste='" &  t.poste & "' and datemax='" & t.datemax & "'")>=1
    Je maintiens >=1 car dans l'exemple un seul des 2 doublons est déclaré à supprimer
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour Nico84, Carden752,

    Merci pour votre aide, vos formules respectives fonctionnent parfaitement.

    A bientôt
    StSym

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

Discussions similaires

  1. [XL-2013] Macro suppression de lignes selon critère - fichier volumineux
    Par demeter dans le forum Excel
    Réponses: 9
    Dernier message: 13/06/2014, 18h28
  2. Suppression lignes vides selon critères
    Par stsym dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/05/2013, 07h36
  3. Suppression de lignes selon critères
    Par gege765 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/10/2012, 19h41
  4. [XL-2000] Suppression plage colonne selon critères
    Par Tydher dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/04/2011, 12h45
  5. [XL-2002] Suppression lignes identiques
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/05/2010, 18h59

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