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 :

Req SQL sans doublons


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut Req SQL sans doublons
    Bonjour Tout le monde,

    J'ai 3 tables (Demandes, Caractéristique et Valeur_Caractéristique) , chaque demande possède 0, 1 ou 2 caractéristiques, Ma question c'est comment peut on faire pour lister toutes les demandes avec leur caractéristique (valeur_caractéristique) sans avoir des doublons, c-a-d dans le cas ou j'ai 2 caractéristiques j'affiche seulement une.

    Ci-après un exemple du résultat de la requête que j'ai fait Exp :

    11001 Installation
    11001 Conforme
    11002 000000000
    11003 Configuration
    11003 Conforme

    Merci pour votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Ton message n'est pas du tout clair.
    Peux-tu :
    - Reformuler ta question en étant plus précis,
    - Fournir les scripts de création des 3 tables,
    - Fournir également des exemples de jeux de données illustrant ce que tu veux obtenir comme résultat.
    Citation Envoyé par ahmedbassou Voir le message
    ... c-a-d dans le cas ou j'ai 2 caractéristiques j'affiche seulement une.
    Laquelle des 2 caractéristique veux-tu afficher ? la caractéristique la plus récente, la plus ancienne, celle ayant la plus petite valeur, la plus grande valeur, etc. Sachant que :
    une demande possède 0, 1 ou 2 caractéristiques
    A+

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Tu veux la liste des demandes possédant au moins une caractéristique?

    Si c'est le cas ne passe pas par un JOIN mais par un EXISTS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT col1 
    FROM DEMANDE D 
    WHERE EXISTS(SELECT * 
                         FROM CARACTERISTIQUE C
                         WHERE C.IDDEMANDE=D.IDDEMANDE)

  4. #4
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut fonctions de classement
    Bonjour,

    En effet, il faudrait avoir un peu plus de précisions, notamment sur la caractéristique que vous souhaitez garder à afficher.

    Je vous conseille cependant de regarder du coté des fonctions de classement, notamment ici : http://msdn.microsoft.com/fr-fr/library/ms189461.aspx .
    En utilisant ces fonctions, notamment avec ROW_NUMBER, vous devriez pouvoir limiter l'affichage à une seule caractéristique par demande.

    Bon courage

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut Reformulation demande
    Bonjour Je vous remercie pour l’intérêt que vous avez données à ma demande, bon je reformule mon besoin avec des exp:

    J'ai une table demande qui a la structure suivante

    N°Dmd Demandeur ID_NAt RcvDte
    -------------------------------------------------------
    2000 JPC AUDIT 17 2010-11-25 09:46:00.000
    2011 JPC AUDIT 15 2010-11-26 09:51:00.000
    2012 JPC AUDIT 16 2010-12-06 15:13:00.000
    2013 JPC AUDIT 15 2010-12-06 16:20:00.000
    2014 JPC AUDIT 18 2010-12-06 16:25:00.000

    Table ValCaractéristique (caractéristique de la demande) :

    ID_ValC N° Dmd IDCar ValCar
    ------------------------------------------------
    4178 2011 69 Installation/affectation
    4179 2011 49 00000000000000000
    4180 2012 61
    4181 2012 49 00000000000000000
    4185 2013 69 Installation/affectation
    4186 2013 49 00000000000000000
    4187 2014 51 Usure Normale

    Table NatDem (nature demande)

    ID_Nat NatDsc
    ---------------------------
    15 Exploitation
    16 Incident
    17 Information
    18 Incident Bloquant
    Donc mon objectifs est d'afficher la liste de toutes les demandes avec leurs nature et caractéristique dans le cas ou la nature de la demande est "Exploitation" j'affiche la caractéristique si autre du vide " ",

    Par exp :

    N°Dmd Nature Caractéristique
    ---------------------------------------------------------------------
    2000 Information
    2011 Exploitation Installation / affectation
    2012 Incident
    2013 Exploitation Installation / affectation
    2014 Incident Bloquant
    Mais malheureusement avec une simple requête de sélection j'ai eu le résultat suivant :

    N°Dmd IdCar Nature Caractéristique
    ---------------------------------------------------------------------
    2011 69 Exploitation Installation / affectation
    2011 49 Exploitation 00000000000000000
    2012 61 Incident
    2012 49 Incident 00000000000000000
    2013 69 Exploitation Installation / affectation
    2013 49 Exploitation 00000000000000000
    2014 51 Incident Bloquant Usure Normale
    Des demandes en double et d'autre non afficher

    Merci de m'aider

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    C'est un peu mieux qu'avant, mais, pour moi, ce n'est toujours pas assez précis.

    Si tu veux juste ne pas remonter les lignes caractéristique de la demande (ValCaracterisque) pour lesquelles le champ ValCar est vide ou égale à '00000000000000000', (la cause des doublons), essaie la requête ci-dessous :

    Essaies ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  D.NoDmd, ISNULL(C.ValCar,'') AS ValCar 
    FROM Demande D 
    LEFT OUTER JOINT ( SELECT DISTINCT V.NoDmd, V.ValCar 
                       FROM ValCaracteristique V
                       WHERE V.ValCar NOT IN ('', '00000000000000000') 
                       AND   V.ValCar IS NOT NULL 
                      ) C 
    ON D.NoDmd = C.NoDmd

    Remarque : La jointure externe LEFT OUTER JONT va te ramener les Demandes pour lesquelles, il n' y a aucune caractéristique. Pour ces lignes le champ ValChar sera NULL transformé en chaine vide par la fonction ISNULL(..)

    A+

Discussions similaires

  1. Requete SELECT SQL sans doublon
    Par arnaud_76 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/11/2014, 07h01
  2. Affichage lignes SQL sans doublons
    Par Aquellito dans le forum ASP
    Réponses: 2
    Dernier message: 23/03/2009, 16h11
  3. [SQL] Affichage des resultats sans doublons
    Par Luverger dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/08/2007, 14h28
  4. [SQL] liste déroulante sans doublons
    Par crashdown31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/06/2007, 20h48
  5. [SQL] Eviter doublons dans un select (sans DISTINCT)
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 40
    Dernier message: 11/07/2006, 17h07

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