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

Requêtes et SQL. Discussion :

Requête extrèmement complexe


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut Requête extrèmement complexe
    Bonjour tout le monde !

    Voilà, il y'a quelques temps l'utilisateur Philben m'a aidé grandement sur ce forum sur un problème de jointure.

    Je devais sortir le chiffre d'affaire de chaque magasins pour le mois de janvier de 2006 et 2007 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              2006             2007
    Mag1       44                33
    Mag2       11                18
    Mag3       12                56
    ...
    Pour cela j'ai une table CAmarqueParPorte dont la structure est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idStore, idBrand, Mois, Annee, SalesNetAmount
    014101,   111,    01,       2006,         34.50
    Philben m'avais sorti la requête suivante qui marchait super bien ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TRANSFORM Sum(CAmarqueParPorte.SalesNetAmount) AS SUMSalesNetAmount 
    SELECT PB_Affiliés.Nom AS Expr1 
    FROM CAmarqueParPorte, PB_Affiliés, MagComparables 
    WHERE (((CAmarqueParPorte.mois)='01') 
    AND ((CAmarqueParPorte.annee)='2006' Or (CAmarqueParPorte.annee)='2007') 
    AND PB_Affiliés.IdAfilliéGROUPEMENT = Left(CAmarqueParPorte.idStore,3) 
    AND MagComparables.idStore = CAmarqueParPorte.idStore) 
    GROUP BY Left(CAmarqueParPorte.idStore,3)  + ' ' + PB_Affiliés.Nom 
    PIVOT [Mois] & '/' & [Annee] IN ('01/2006','01/2007');"
    Gràce à cette requête j'ai pu en faire une autre, à savoir, le CA de chaque magasin de janvier 2006 et janvier 2007 pour une marque donnée (ici la marque '111'). :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TRANSFORM Sum(CAmarqueParPorte.SalesNetAmount) AS SUMSalesNetAmount
    SELECT PB_Affiliés.Nom AS Expr1 
    FROM CAmarqueParPorte, PB_Affiliés, MagComparables, MarquesParPorte 
    WHERE ( left(MarquesParPorte.idStore,3) = left(MagComparables.idStore,3) AND((CAmarqueParPorte.mois)='01') 
    AND ((CAmarqueParPorte.annee)='2006' Or (CAmarqueParPorte.annee)='2007') 
    AND PB_Affiliés.IdAfilliéGROUPEMENT = Left(CAmarqueParPorte.idStore,3) 
    AND MagComparables.idStore = CAmarqueParPorte.idStore 
    AND CAmarqueParPorte.idBrand = '111' 
    AND MarquesParPorte.idMarque = '111') 
    GROUP BY Left(CAmarqueParPorte.idStore,3)  + ' ' + PB_Affiliés.Nom 
    PIVOT [Mois] & '/' & [Annee] IN ('01/2006','01/2007');
    Maintenant j'aimerai faire la fusion des deux à savoir obtenir le Chiffre d'affaire de chaque magasin pour la marque '111' et le chiffre d'affaire toute marque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              2006Marque      2007Marque   2006Total     2007Total
    Mag1
    Mag2
    Mag3
    Mais là je sèche complètement...
    J'ai pensé faire les requêtes séparément mais on ne trouve pas les mêmes magasins dans les 2 requêtes car, les magasins n'ont pas toutes les marques.
    On peut trouver Mag1, Mag2 dans la première, et Mag1, Mag2 et Mag3 dans la 2ème.

    En gros il faut que ce soit ma première requête qui détermine la liste des magasins.

    D'avance un ENORME merci à ceux qui pourront m'aider car je ne vois vraiment pas du tout...

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    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
     
    PARAMETERS [laquelle] Long;
    TRANSFORM Sum(total) AS toto
    SELECT store
    FROM
    (SELECT store, "marque" & [brand] & " " & [an] AS rub, Sum(mt) AS total
    FROM matable
    WHERE  brand=[laquelle]
    GROUP BY store, "marque" & [brand] & " " & [an]
    UNION select store,"total" & [an] as rub,sum(mt) as total
    from matable
    group by store,"total" & [an]) as a 
     
    GROUP BY store
    PIVOT rub;
    Elle est pas belle la vie ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    Superbe !! Franchement bravo, j'y connais grand chose en SQL mais je trouve cette requête vraiment impressionnante !!

    Alors elle me donne presque ce qu'il me faut, en effet, elle inverse mes champs, au lieu d'avoir
    Marque111 2006, Marque111 2007, 2006, 2007
    j'ai
    2006,2007, Marque111 2006, Marque111 2007

    C'est étrange...

    Et à cause de ça (j'imagine) j'ai 3 lignes en trop (c'est à dire des magasins qui n'ont pas la marque 111 dans le résultat de ma requête).

    La voici :

    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
     
    TRANSFORM Sum(total) AS toto
    SELECT  PB_Affiliés.IdAfilliéGROUPEMENT
    FROM
     
    (SELECT PB_Affiliés.IdAfilliéGROUPEMENT, "marque" & [idbrand] & " " & [annee] AS rub, Sum(CAmarqueParPorte.SalesNetAmount) AS total
    FROM CAmarqueParPorte, PB_Affiliés, MagComparables, MarquesParPorte 
    WHERE (left(MarquesParPorte.idStore,3) = left(MagComparables.idStore,3) AND((CAmarqueParPorte.mois)='01') 
    AND PB_Affiliés.IdAfilliéGROUPEMENT = Left(CAmarqueParPorte.idStore,3) 
    AND MagComparables.idStore = CAmarqueParPorte.idStore 
    AND CAmarqueParPorte.idBrand = '111' 
    AND MarquesParPorte.idMarque = '111')
    GROUP BY PB_Affiliés.IdAfilliéGROUPEMENT, "marque" & [idbrand] & " " & [annee]
     
    UNION SELECT PB_Affiliés.IdAfilliéGROUPEMENT, [annee] AS rub, Sum(CAmarqueParPorte.SalesNetAmount) AS total
    FROM CAmarqueParPorte, PB_Affiliés, MagComparables 
    WHERE (((CAmarqueParPorte.mois)='01') 
    AND PB_Affiliés.IdAfilliéGROUPEMENT = Left(CAmarqueParPorte.idStore,3) 
    AND MagComparables.idStore = CAmarqueParPorte.idStore) 
    GROUP BY PB_Affiliés.IdAfilliéGROUPEMENT,[annee]) as a
     
    GROUP BY PB_Affiliés.IdAfilliéGROUPEMENT
    PIVOT rub;
    A part ce petit détail elle marche vraiment bien !!!

    Bravo encore et très bon week end !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    ho lala, je déséspère... j'ai tenté tous le week end à mettre les champs dans l'ordre mais j'y arrive pas.

    J'ai inversé mes 2 requêtes mais il me sort toujours les totaux avant les CA pour la marque 111...

    C'est fou ça quand même

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    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
     
    PARAMETERS [laquelle] Long;
    TRANSFORM Sum(total) AS toto
    SELECT store
    FROM
    (SELECT store, "marque" & [brand] & " " & [an] AS rub, Sum(mt) AS total
    FROM matable
    WHERE  brand=[laquelle]
    GROUP BY store, "marque" & [brand] & " " & [an]
    UNION 
    SELECT store, "TOTAL " & [an] AS rub, Sum(mt) AS total
    FROM matable
    WHERE store In (select store from matable where brand=[laquelle])
    GROUP BY  store, "TOTAL " & [an]) as tempo
    GROUP BY store
    ORDER by rub desc
    PIVOT  rub;
    ceci va exclure les magasins n'ayant pas de ca pour la marque

    pour les en têtes de colonne c'est access qui les trie par ordre alpha
    c'est pour cela que j'avais choisi marque et total comme entête

    est ce si important ?
    Elle est pas belle la vie ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    Nickel crome !! Tous marche très bien maintenant (oui l'ordre était important car je fais un export de ma requête sur Excel et l'ordre des champs ont une importance dans le fichier).

    Merci encore !!

    Bonne semaine !

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

Discussions similaires

  1. Simplication d'une requête "trop complexe"
    Par Manopower dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 27/06/2006, 14h22
  2. Requête : Jointure Complexe
    Par xwawa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2006, 10h10
  3. Requête sql complexe
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/01/2006, 11h55
  4. Requête SQL Complexe
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/11/2005, 20h53
  5. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 16h18

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