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

Développement SQL Server Discussion :

DISTINCT sur un seul champ


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Points : 44
    Points
    44
    Par défaut DISTINCT sur un seul champ
    Bonjour

    Je dois mettre à jour une table T (ne comportant pas de clé) en supprimant les doublons.
    Le champ qui doit être unique est le champ LINK_IK.
    Je fais donc une procédure stockée qui me permet de créer une table temporaire (TTemp) de même schéma que ma table T, je rempli cette table avec les données de T, puis ensuite je vide T et je dois la re remplir avec les données de TTemp, sur lesquelles je fais un distinct.

    C'est la que mon problème se pose...
    Mon distinct ne s'applique que sur un champ, mais j'ai besoin de tous les champs pour pouvoir récupérer l'intégralité de mes données à insérer dans T...

    Exemple d'une entrée dans la table :

    LINK_ID NAME DATE
    105023 george 23.11.87
    105023 george 23.11.87
    105042 pierre 01.05.02

    Dans ce cas la, je voudrai obtenir les lignes :

    LINK_ID NAME DATE
    105023 george 23.11.87
    105042 pierre 01.05.02

    Je ne sais pas comment faire... Je sais qu'il y a une façon de procéder avec join, mais je coince...

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 904
    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 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    DISTINCT est un opérateur de dédoublonnage de ligne il n'opère pas sur une colonne (et non un champ, cela n'existe pas en SGBDR).

    Lisez l'article que j'ai écrit sur le dédoublonnage : http://sqlpro.developpez.com/cours/doublons/

    A +

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
     LINK_ID, NAME, DATE
    FROM (
     SELECT LINK_ID, NAME, DATE, ROW_NUMBER() OVER (PARTITION BY LINK_ID) AS ROW
     
    ) EXT
    WHERE ROW = 1

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Je ne suis pas censée faire le DISTINCT sur toutes mes colonnes... La première ligne de code de votre chapitre 2.1.3 fait exactement cela :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT NUM, NOM, PRENOM
    INTO   T_DOUBLON_TMP
    FROM   T_DOUBLON
    GROUP  BY NUM, NOM, PRENOM
    HAVING COUNT(*) > 1

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Merci SergeJack, mais j'ai un message d'erreur avec ce code...

    Msg*4112, Niveau*15, État*1, Ligne*15
    La fonction de classement "ROW_NUMBER" doit comporter une clause ORDER BY.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    J'ai essayé de faire celà :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE
    FROM Test.dbo.Suivants as S
    WHERE  S.ID < ANY (SELECT ID
                        FROM   Suivants as S2
                        WHERE  S.ID <> S2.ID
                          AND  S.LINK_ID = S2.LINK_ID)

    Mais que je mette les "as" ou non, cela ne fonctionne pas...

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
     LINK_ID, NAME, DATE
    FROM (
     SELECT LINK_ID, NAME, DATE, ROW_NUMBER() OVER (PARTITION BY LINK_ID ORDER BY DATE ASC) AS ROW
    
    ) EXT
    WHERE ROW = 1

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

Discussions similaires

  1. Distinct d'un seul champ sur un objet
    Par kohsaka dans le forum Linq
    Réponses: 2
    Dernier message: 31/05/2011, 08h13
  2. Utilisation de Distinct sur un seul champ!
    Par Bils dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/11/2007, 09h31
  3. [9i, débutant] Clause DISTINCT sur un seul champ
    Par JYves dans le forum Oracle
    Réponses: 11
    Dernier message: 06/09/2006, 17h08
  4. Distinct sur un seul champ...
    Par Noodles dans le forum Langage SQL
    Réponses: 16
    Dernier message: 04/01/2005, 09h36
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 23/06/2004, 23h04

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