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 :

[SQL] dictinct sur plusieurs champs


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Points : 64
    Points
    64
    Par défaut [SQL] dictinct sur plusieurs champs
    Est ce possible de faire un select disctinct sur 2 champs? Quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select distinct(tc.ct_code, tc.et_code)
    from TMP_CHANTIER tc, TMP_COMPOSITION_CHAINE tcc
    where tc.ct_type_local = 'D'
      and tc.ct_code = tcc.ct_code
      and tc.et_code = tcc.et_code
    Afin de respecter une regle de gestion de mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pour chaque duo ct_code et et_code de TMP_CHANTIER ayant le ct_type_local (TMP_CHANTIER) égale à 'D', le duo ct_code et et_code doit obligatoirement être référencé une seule fois au sein de la table TMP_COMPOSITION_CHAINE
    Moi je pensais comparer le nombre de résultats en le select normal et le select distinct. Mais il refuse de faire un select disctinct sur plusieurs champs.

    Est ce que quelqu'un a une idée?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Sans les parenthèses, cela doit marcher

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Au niveau syntaxe Mediat a raison.
    Néanmoins tu n'es pas obligé de comparer le résultat de deux requète pour avoir l'information dont tu as besoin.
    Il suffit peut-être que tu comptes les couples.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select tc.ct_code, tc.et_code, count(*) as nbre 
    from TMP_CHANTIER tc, TMP_COMPOSITION_CHAINE tcc 
    where tc.ct_type_local = 'D' 
      and tc.ct_code = tcc.ct_code 
      and tc.et_code = tcc.et_code 
    group by tc.ct_code, tc.et_code
    Attention cela n'est valable que si pour un ct_code, et_code tu ne peux pas avoir plusieurs TMP_COMPOSITION_CHAINE. Dans ce cas ta solution ne fonctionne pas non plus.

    Si tu ne veux que les couples qui ont plusieurs éléments tu peux rajouter

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    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 865
    Points : 53 018
    Points
    53 018
    Billets dans le blog
    6
    Par défaut
    1) distinct n'est pas une fonction.
    Lire : http://sqlpro.developpez.com/cours/sqlaz/select/#L1.2

    2) utiliser la clause JOIN pour joindre vos tables
    lire : http://sqlpro.developpez.com/cours/sqlaz/jointures/#L2

    La bonne syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT tc.ct_code, tc.et_code
    FROm   TMP_CHANTIER tc
           INNER JOIN TMP_COMPOSITION_CHAINE tcc
                 ON     tc.ct_code = tcc.ct_code
                    and tc.et_code = tcc.et_code 
    WHERE  tc.ct_type_local = 'D'
    A +

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

Discussions similaires

  1. [SQL] Distinct sur plusieurs champs
    Par sllab dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/08/2009, 21h29
  2. [SQL] Requête sur un champ mais avec plusieurs conditions
    Par lowkey dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/02/2008, 12h26
  3. trie sur plusieurs champs sans sql
    Par ramseskeops dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/06/2007, 20h41
  4. SQL : Jointure droite sur plusieurs champs
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/12/2006, 13h55
  5. [SQL SERVER ] Tri sur plusieurs champs
    Par fantomchris dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/07/2006, 17h59

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