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, les bases [2012]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut Requête PIVOT, les bases
    Bonjour,

    J'ai une petite question pour vous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	   [dbo].[ResultatTempPeriode].[NomPointVente]
    	  ,[dbo].[ResultatTempPeriode].[NomFournisseur]
    	  ,[dbo].[ResultatTempPeriode].[CA]
     FROM [dbo].[ResultatTempPeriode] 
     WHERE 
    	[dbo].[ResultatTempPeriode].[IDPointVente] = 1  
      AND   
    	[dbo].[ResultatTempPeriode].[IDFournisseur] in (268,260)
    Résultat :
    NomPointVente | NomFournisseur | CA
    PointVente-1 Fournisseur-268 26250,14
    PointVente-1 Fournisseur-260 121967,83

    Je suis donc parti sur du PIVOT, première fois, il faut bien une première à tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
    	   [NomPointVente]
    	  ,[Fournisseur-268] as 'Fournisseur-268'
    	  ,[Fournisseur-260] as 'Fournisseur-260'
     
      FROM [dbo].[ResultatTempPeriode]
      PIVOT (sum(CA) FOR NomFournisseur IN ([Fournisseur-268],[Fournisseur-260])) as pvt
     WHERE 
    	[dbo].[ResultatTempPeriode].[IDPointVente] = 1  
      AND   
    	[dbo].[ResultatTempPeriode].[IDFournisseur] in (268,260)
    Résultat :

    NomPointVente | Fournisseur-268 | Fournisseur-260
    PointVente-1 NULL 121967,83
    PointVente-1 26250,14 NULL

    Mais je souhaitais ceci :

    Résultat souhaité (une seule ligne) :

    NomPointVente | Fournisseur-268 | Fournisseur-260
    PointVente-1 26250,14 121967,83

    J'ai loupé quoi ?

    D'avance, merci.
    Raphaël.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Je ne pense que que ce soit exactement cette requête qui vous ait donné ce résultat.

    En l'état, elle aurait dû vous renvoyer une erreur, car les colonnes de filtre ne sont pas explicitement dans le SELECT, qui sert de regroupement lors de l'opération PIVOT.

    Vous n'êtes cependant pas loin du but, postez la requête exacte ,afin que l'on puisse vous indiquer l'origine de l'erreur.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Pourtant, je vous assure que j'ai un résultat mais pas le bon et c'est surement à cause de ce que vous mettez en évidence.

    En gros la table est comme ça (en simplifiant):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
                [IDAgence]
    	   ,NomAgence
               ,IDTourOperateur
    	   ,NomTo
    	   ,ca	   
     FROM [dbo].[ResultatTempPeriode]
    donc

    IDAgence NomAgence IDTourOperateur NomTo CA
    1 Agence A 260 TO A 5000
    1 Agence A 261 TO B 1121
    1 Agence A 262 TO C 5654
    1 Agence A 263 TO D 5560
    1 Agence B 260 TO A 7556
    1 Agence B 261 TO B 745
    1 Agence B 262 TO C 8686
    1 Agence B 263 TO D 800

    Et je souhaite présenter un résultat avec deux TO important.
    Nom Agence TO A TO D
    Agence A 5000 5560
    Agence B 7556 800

    C'est à cause de IDTourOperateur ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Ok c'est bon !

    Exemple :

    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
    SELECT 
    	 [IDAgence],[NomAgence], [268]  as '[TO A]',[260] as '[TO D]'
    FROM
      (SELECT 
           [IDAgence]
    	   ,NomAgence
    	   ,chiffre
    	   ,IDTourOperateur
      FROM [dbo].[ResultatTempPeriode]) as sourceTable
      PIVOT
     
       (sum(chiffre) FOR IDTourOperateur IN ([268] ,[260])
     
       ) as pvt
     
     WHERE 
    	[IDAgence] = 1

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

Discussions similaires

  1. [AC-2007] Masquer et Afficher les requêtes dans une Base de données Access
    Par Rayan1 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/01/2016, 07h43
  2. Réponses: 4
    Dernier message: 21/04/2015, 13h27
  3. Réponses: 7
    Dernier message: 02/02/2012, 18h00
  4. Réponses: 3
    Dernier message: 21/05/2010, 10h43
  5. Lister avec VBA les Objets Requêtes d'une Base Access
    Par chim33 dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/03/2009, 23h05

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