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

MS SQL Server Discussion :

Probleme avec distinct


Sujet :

MS SQL Server

  1. #1
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut Probleme avec distinct
    bonjour tout le monde
    si je fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct C1,C2 from tabe1, tabe2
    dans ce cas le résultat est tous les champs C1 C2 sans doublons ce que je veux savoir c'est
    la fonction distint fonctionne sur tous les champs de table1 et sur tous les champs de table2 ou sur tous les chmps de table1 et table2 en meme temp

    comment je peux faire pour selectionner tous les chmps C1 et c2 de de table1 et table2 et sans doublons

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Avec cette instruction, la requete te retourne le produit cartésien des deux tables, est-ce bien ce que tu souhaites ? Tes "doublons", ne viendraient-il pas d'une absence de jointure entre tes deux tables ?

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Pour compléter la réponde d'Erwan1978, vous devez comprendre que la clause DISTINCT ne porte pas sur l'un des deux ensembles de données stockés par les tables C1 et C2, mais sur les tuples qui constituent le produit cartésien de ces deux tables

    @++

  4. #4
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci à vous moi ce que j'ai dans la table1 j'ai un chmp C1 qui est de meme type que C2 dans la table2 j'aivoulu récuperer tous les champs de ce type sans doublons

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 143
    Points
    143
    Par défaut
    On gagnerait tellement de temps, si vous aviez publié les DDL de vos tables !

    moi ce que j'ai dans la table1 j'ai un chmp C1 qui est de meme type que C2 dans la table2
    Vous voulez les valeurs distinctes de la colonne C1 de la table1 et les valeurs distinctes de la colonne C2 de la table2 ?

    Si c'est le cas, vous pouvez faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT T1.C1
    FROM table1 T1
    UNION SELECT DISTINCT T2.C2
    FROM table2 T

  6. #6
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci je vais vous expliquer plus
    dans la table1 j'ai un champ lieu(C1)
    et dans la table2 j'ai un champ lieu (C2) je veux selectionner tous les lieux de table1, et table2 sans avoir les doublons pour les placer dans un composant combobox

    en fin dans ce composant je vais avoir tous les lieux de ma base sans doublons

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 143
    Points
    143
    Par défaut
    Avez vous essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT T1.lieu
    FROM table1 T1
    UNION SELECT DISTINCT T2.lieu
    FROM table2 T
    en remplaçant table1 et table2 par le nom de vos deux tables ?

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Juste pour info, UNION seul réalise le DISTINCT des deux ensemble.
    Si on veut les doublons, il faut ajouter utiliser UNION ALL.

    @++

  9. #9
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci mais si je vais recuperer les valeurs sans doublon bien sûr de deux champs de la meme table
    c'est le meme principe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT DISTINCT T1.lieu
    FROM table1 T1
    UNION SELECT DISTINCT T1.lieu1
    FROM table1 T1

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 143
    Points
    143
    Par défaut
    c'est le meme principe?
    Oui. Mais comme le soulignait judicieusement Elsuket, il n'est pas necessaire que vous ajoutiez DISTINCT apres votre SELECT puisque par défaut l'instruction UNION se charge déjà de récupérer les valeurs distinctes.

    Cela donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.lieu1
    FROM table1 T1
    UNION SELECT T1.lieu2
    FROM table1 T1
    où lieu1 et lieu2 désignent les colonnes de votre table dont vous voulez extraire les valeurs distinctes.

  11. #11
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci

  12. #12
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    j'ai fait ça mais ça pose un prob
    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
     
     
     
    SQLSTR = "Select  T1.N from march T1 UNION   select T1.N1 from march T1 UNION select  T1.N2 from march T1 "
     
    CMD1 = New SqlCommand(SqlStr, con1)
               DR1=Cmd1.executeReader
               If DR1.HasRows Then
                    While DR1.read
     
                        Me.DropDownList4.Items.Add(DR1("N"))
                        Me.DropDownList4.Items.Add(DR1("N1"))
                        Me.DropDownList4.Items.Add(DR1("N2"))
                    End While
                  End If
    il me signale une erreur dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Me.DropDownList4.Items.Add(DR1("N1"))

  13. #13
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Que donne l'exécution de votre requête sous SQL Server Management Studio ?

    @++

  14. #14
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    j'ai pas compris

    il me signale une erreur exception

  15. #15
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Oui, mais quelle est cette erreur ?
    Soyez plus précis dans vos réponses

    @++

  16. #16
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    voici l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
     
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. 
     
    Détails de l'exception: System.IndexOutOfRangeException: N1

  17. #17
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Là il s'agit plutôt d'une erreur .NET.
    N'étant pas expert de ces langages, je vous conseille le forum .NET

    @++

  18. #18
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci

  19. #19
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonsoir,

    Vu l'erreur, visiblement cette ligne vous pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DropDownList4.Items.ADD(DR1("N1"))
    Je pense que vous ne ramenez aucun enregistrement car N1 n'existe pas.

    Est ce que cette requête fonctionne dans un éditeur SQL ? Est ce que cette requête fonctionne correctement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select  T1.N from march T1 UNION   select T1.N1 from march T1 UNION select  T1.N2 from march T1
    ++

  20. #20
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    Oui ça marche trés bien

Discussions similaires

  1. probleme avec distinct et order by
    Par meri_mima dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/10/2009, 17h07
  2. problem avec distinct
    Par anas.bah dans le forum PL/SQL
    Réponses: 4
    Dernier message: 11/03/2009, 12h35
  3. Probleme avec la clause SELECT DISTINCT
    Par jojodid dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/05/2008, 14h12
  4. probleme sur une requete avec DISTINCT
    Par samsso2006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/05/2007, 14h35
  5. probleme avec distinct
    Par firejocker dans le forum Langage SQL
    Réponses: 17
    Dernier message: 14/11/2005, 18h27

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