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 :

[SQL2008][SQL] : Reponse synthetique et complete par document


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut [SQL2008][SQL] : Reponse synthetique et complete par document
    Bonjour,

    Le titre est bizarre mais je n'ai pas trouvé mieux.

    Mon besoin :
    J'ai une base d'information avec des documents. Chaque document à un certain nombre de paramètres fixes et d'autres facultatifs.

    Les attributs fixes sont stockés dans la table document
    Les attributs facultatifs sont stockés dans une table séparée avec un lien (ID du doc) comme jointure.

    Donc Tab_Doc à pour colonne ID_DOC ; Reference ; Titre ; Date de création
    ex : 1 ; REF_1 ; Doc_1 ; 12/09/11
    2 ; REF_2 ; Doc_2 ; 13/09/11

    et Tab_Facultatif à pour colonne ID_DOC ; Libellé paramétre ; Valeur.
    ex : 1 ; Validé ; Oui
    1 ; Emetteur ; Toto
    1 ; Service ; Service_1
    2 ; Validé ; Non
    2 ; Emetteur ; Titi

    Je souhaite créer une requête pouvant me retourner les informations suivantes :
    1 ; REF_1 ; Doc_1 ; 12/09/11 ; Oui ; Toto ; Service 1
    2 ; REF_2 ; Doc_2 ; 13/09/11 ; Non ; Titi ;

    Est ce possible en SQL ? Sinon en procédure stockée ?

    Et si oui, comment ?

    D'avance merci pour vos retours car là je séche complètement.

    Bonne journée (ou soirée).

    A+



    1 ; REF_1 ; Doc_1 ; 12/09/11 ; Validé

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Intéressez vous à ce sujet : http://sqlpro.developpez.com/cours/m...n/metadonnees/

    Les requêtes sont généralement de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.DOC_ID
    FROM   MaTablePrimaire AS T
           INNER JOIN MatableMeta AS M
                 ON T.??? = M.???
    WHERE  PARAM_LIB IN (...)
      AND  PARAM_VAL IN (...)
    GROUP  BY T.DOC_ID
    HAVING COUNT(DISTINCT PARAM_LIB) = COUNT(PARAM_VAL)
      AND  COUNT(DISTINCT PARAM_LIB) = n -- n étant le nombre de couple LIB/VAL
    A +

    PS : la prochaine fois respectez la charte de postage : http://www.developpez.net/forums/d96...vement-poster/
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Oui, c'est possible.

    Le plus "simple", c'est de faire N jointures sur la table des attributs facultatifs, avec un OUTER JOIN à chaque fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select doc.id_doc, doc.reference, doc.titre, doc.datecre, p1.valeur validie, p2.valeur emetteur, p3.valeur service
    from Tab_Doc doc
    left outer join Tab_Facultatif p1 on p1.id_doc = doc.id_doc and p1.libelle = 'Validé'
    left outer join Tab_Facultatif p1 on p2.id_doc = doc.id_doc and p1.libelle = 'Emetteur'
    left outer join Tab_Facultatif p1 on p3.id_doc = doc.id_doc and p1.libelle = 'Service'
    Il faudra rajouter une jointure par propriété.

    Vous pouvez aussi utiliser une fonction de pivot, mais je ne sais plus si SQL Server 2008 en supporte une nativement. Dans tous les cas, vous comprendrez qu'il vaut mieux faire une unique jointure inner join, récupérer deux colonnes "libellé paramètre" et "valeur paramètre", et faire le pivot dans votre application cliente.

  4. #4
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Bonjour

    Désolé pour le format de ma demande mais c'est la première fois que j'utilise ce site pour la partie base de données.

    Par contre, pour ce qui concerne le FAQ, c'est bien quand on sait ce que l'on cherche. Et là, mon souci était que je ne savais que choisir.

    En tout cas merci pour ces 2 retours que je vais mettre en application.

    A+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 24/04/2006, 19h24
  2. [MySQL] SQL et résultat de recherche par mot clef
    Par carelha dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/04/2006, 15h40
  3. [PL/SQL] Interrogation d'un tableau par JAVA
    Par Titouf dans le forum Oracle
    Réponses: 12
    Dernier message: 08/02/2006, 16h59
  4. [SQL] contrôler le texte renvoyé par le serveur web
    Par FFF dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 10h49
  5. Réponses: 2
    Dernier message: 01/06/2004, 15h08

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