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 :

requête .. Pivot ou non?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut requête .. Pivot ou non?
    Je n'arrive pas à effectuer la requête nécessaire. J'ai lu et essayer plusieurs choses avec les tables PIVOT, mais je n'y arrive pas.

    Voici mon cas avec juste les champs nécessaires pour l'exemple:

    J'ai 3 tables.

    Nom table 1 = "Demande"
    Elle contient les champs "idDemande"(int) et "memNom"(varchar)

    Nom table 2 = "Document"
    Elle contient les champs "idDocument"(int) et "docCode"(varchar)

    Nom table 3 = "DemandeDocument"
    C'est une table joint entre la table 1 et 2.
    Elle contient les champs "idDemande"(int), "idDocument"(int) et "ddEnvoyer"(bit).

    Si par exemple j'ai les données suivantes:
    Table "Demande"
    1; 'Luc'
    2; 'Manon'

    Table "Document"
    1; 'Doc1'
    2; 'Doc2'
    3; 'Doc3'

    Table "DemandeDocument"
    1; 1; True
    2; 1; False
    2; 3; True

    Je voudrais une requête qui me sortirait la colonne "memNom" ainsi que autant de colonne qu'il y a d'enregistrement dans la table "Document". Et pour chaque ligne, j'aurais la valeur du champ "DemandeDocument.ddEnvoyer".

    Exemple de résultat pour les données ci-dessus:

    memNom, [Doc1],[Doc2],[Doc3]
    -------------------------------
    Luc,True,NULL,NULL
    Manon, False, NULL, True

    Merci pour l'aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour quel est votre sgbd ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour quel est votre sgbd ?
    SQL Server 2008

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    regardez ceci : http://msdn.microsoft.com/fr-fr/library/ms177410.aspx

    Par contre si le nombre de document maximum est dynamique il va surement falloir passer par une procédure T-SQL.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Citation Envoyé par punkoff Voir le message
    regardez ceci : http://msdn.microsoft.com/fr-fr/library/ms177410.aspx

    Par contre si le nombre de document maximum est dynamique il va surement falloir passer par une procédure T-SQL.
    J'ai bien lu, mais je n'y arrive pas.
    Pour ma construction de champ dynamique c'est ok, j'ai déjà une façon de construire ma chaine. Mais le reste ne fonctionne pas.

    On dirait que le pivot table doit seulement être utilisé dans le cas d'une fonction count, sum, avg, etc ... mais moi ce n'est pas ça du tout ... c'est en lien avec un champ boolean.

    Si quelqu'un a des suggestions ... merci.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Comme ceci :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    With Demande (idDemande, memNom) as
    (
    select 1, 'Luc' union all
    select 2, 'Manon'
    )
      ,  Document (idDocument, docCode) as
    (
    select 1, 'Doc1' union all
    select 2, 'Doc2' union all
    select 3, 'Doc3'
    )
      ,  DemandeDocument (idDemande, idDocument, ddEnvoyer) as
    (
    select 1, 1, cast(1 as bit) union all
    select 2, 1, cast(0 as bit) union all
    select 2, 3, cast(1 as bit)
    )
      ,  SR (memNom, docCode, ddEnvoyer) as
    (
    select dmd.memNom, doc.docCode, cast(ddo.ddEnvoyer as int)
      from Demande as dmd
           cross join Document as doc
           left outer join DemandeDocument as ddo
             on ddo.idDemande  = dmd.idDemande
            and ddo.idDocument = doc.idDocument
    )
    select memNom, [Doc1], [Doc2], [Doc3]
      from SR
     pivot (max(ddEnvoyer) for docCode in ([Doc1], [Doc2], [Doc3])) as pvt;
     
    memNom Doc1        Doc2        Doc3
    ------ ----------- ----------- -----------
    Luc    1           NULL        NULL
    Manon  0           NULL        1

Discussions similaires

  1. Requête avec paramètre non défini à l'avance
    Par The_Super_Steph dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/06/2007, 09h46
  2. Requêtes pivots sous MS-SQL Server
    Par Thony_7 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/05/2007, 16h45
  3. Requête : Affichage champs non vides
    Par emilie31 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/02/2007, 11h01
  4. [MySQL]Sous - Requêtes compatible ou non compatible
    Par costadelo dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/12/2006, 12h33
  5. Requête suppression sur non concordance
    Par curt dans le forum Access
    Réponses: 4
    Dernier message: 30/05/2006, 19h32

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