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 :

Utilisation du pivot : problème de requête "complexe"


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Utilisation du pivot : problème de requête "complexe"
    Bonjour à tous,

    Je viens solliciter votre aide quant à l'utilisation du pivot dans une requête sql.

    La base de donnée sur laquelle je désire faire une requête est une base de données de ventes d'une chaine de 15 magasins.

    Voici une requête avec laquelle j'ai testé l'utilisation de l'opérateur (est-ce le bon terme?) pivot :
    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
    select sum(a.ca),[009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056]
     
    from (select siege, qt
    from tb2010
    where date = '20100102') as sourceTable
     
    pivot
     
    (sum(qt)  for siege in ([009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056])) as pivotTable,
     
    tb2010 as a
     
    where date = '20100102'
     
    group by [009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056]
    Cette requête fonctionne fort bien et dans le cas présent me donne comme résultat :
    - dans la première colonne, le chiffre d'affaire global pour la journée du 2 janvier 2010
    - dans les 15 colonnes suivantes, la quantité d'articles vendus par magasin (il y en a donc 15) pour la même journée. Les noms des 15 dernières colonnes peuvent paraître étranges mais ce sont les identifiants donnés aux différents magasins.

    Partant de cela, j'ai voulu étendre la requête pour coller avec la demande qui m'avait été faite et voici la requête :

    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
    select	gib, ray, substring(eanart,1,12) as ean, pu, sum(qt) as 'qt', sum(ca) as 'ca', sum(rab) as 'rab', 
    		[009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056]
    from
    		(select	siege, qt
    		from	tb2010
    		where	date >= '20100201' and date <= '20100630' 
    				and gib in ('525', '527') 
    				and ray like '4%' 
    		) as sourceTable
    pivot	(
    		sum(qt) for siege in 
    		([009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056])
    		) as pivotTable,
    tb2010
     
    where	date >= '20100201' and date <= '20100630' 
    	and gib in ('525', '527') 
    	and ray like '4%' 
     
    group by gib, ray, substring(eanart,1,12), pu, 
    		[009],[011],[012],[015],[017],[020],[022],[024],[026],[029],[042],[043],[050],[054],[056]
     
    order by ca desc
    Celle-ci est sensé me donner le code gib (données propres à la gestion interne), le numéro de rayon, le code ean de l'article, le prix unitaire, le nombre d'articles vendus, la somme de chiffre d'affaire brut et la somme des rabais par article. A cela, s'ajoute 15 colonnes qui sont sensées contenir le nombre d'articles vendus par magasin.

    Malheureusement pour moi, cela ne fonctionne pas et j'avoue volontiers que je patauge joyeusement dans l'utilisation du pivot.

    Quelqu'un de compétent pourrait-il m'aider dans la réalisation de cette requête ?

    J'espère avoir été clair :-/ . Si ce n'est pas le cas, n'hésitez pas me demander des compléments d'informations.

    Merci d'avance.

    Griftou.

  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
    Citation Envoyé par griftou Voir le message
    Malheureusement pour moi, cela ne fonctionne pas
    Griftou.
    C'est à dire ? tu as une erreur ? les résultats ne sont pas ceux attendus ?

    Est-ce que tu pourrais poster La DDL de ta table, et un jeu d'essai sous forme de INSERT INTO (tu peux faire ca facilement en utilisant l'outil de génération de script, et lui précisant de scripter les données...)

    edit : au besoin, remplace les données par des données bidons (enfin pas trop bidons quand même ) et réduit le jeu si tu en as beaucoup !

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Bonjour,

    Merci pour cette réponse. Il est vrai que j'aurais du préciser le "ça ne fonctionne pas". En fait, la requête s'exécute mais elle dure un temps beaucoup trop long (j'ai laissé tourné 15 minutes et je l'ai interrompue). Ce n'est donc pas utilisable dans mon application en l'état actuel (quand bien même les données renvoyées seraient correctes).

    Pour ce qui est de ta demande je cite :
    Est-ce que tu pourrais poster La DDL de ta table, et un jeu d'essai sous forme de INSERT INTO (tu peux faire ca facilement en utilisant l'outil de génération de script, et lui précisant de scripter les données...)
    Je veux bien fournir cela mais j'avoue ne pas savoir comment faire. Perso, sql-server se résume à créer des db avec des tables de dedans, y mettre des clés primaires et qqes liaisons... Ah non, une fois j'ai réussi à créer un trigger

    Bref, je suis très loin d'être un DBA. Je ne suis qu'un programmeur qui doit se débrouiller pour ses DB car sa boîte n'engagera jamais de DBA et que la formation que je réclame n'a pas l'air d'être au goût des personnes qui s'occupent du budget ^^.

    En conclusion, je peux fournir cela mais il va falloir me dire comment faire.

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

Discussions similaires

  1. [MySQL] problème avec requête sql complexe
    Par neo25 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/01/2012, 15h08
  2. [SQL] Problème de requête sql utilisant LIKE
    Par yakup.67 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2007, 13h31
  3. problème d'utilisation du résultat de ma requête
    Par ph_anrys dans le forum Langage
    Réponses: 5
    Dernier message: 13/03/2006, 11h22

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