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

Livres Discussion :

Analyse des ventes de livres


Sujet :

Livres

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Analyse des ventes de livres
    Bonjour,

    je souhaiterais votre aide pour m'aider a améliorer une requête utilisée pour le boulot.

    Je précise que je n'ai accès a rien d'autre que ces requêtes, je n'ai pas accès à la partie "administrateur".

    J'utilise cette requête pour analyser des ventes de livres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT DISTINCT histo_ventes.cdpdt AS EAN
     , SUM (histo_ventes.qtevendu) AS Somme
     , (select nomaut
       from auteur, pdt_auteur
       where histo_ventes.cdpdt = pdt_auteur.cdpdt
        and numordre = 1 and pdt_auteur.numaut = auteur.numaut) AS Auteurs
     , libpdt AS Titres
     , (select nomeditr from editeur
        where editeur.cdeditr = produit.cdeditr) 
    FROM histo_ventes
    INNER JOIN produit ON histo_ventes.cdpdt = produit.cdpdt
    WHERE dtvaleur BETWEEN '2010-12-01' AND '2010-12-31'
    GROUP BY libpdt, histo_ventes.cdpdt
    ORDER BY Somme DESC
    Et celle-ci pour analyser mes stocks :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select cdfam
     ,(select libfam from famille where famille.cdfam = produit.cdfam)
     ,produit.cdpdt,libpdt,qtesto
     ,(select nomeditr 
       from editeur
       where editeur.cdeditr = produit.cdeditr) 
    from produit,stock_pdt_site
    where produit.cdpdt = stock_pdt_site.cdpdt
     and cdtypsto = 'D'
     and qtesto <> 0
    ORDER BY qtesto DESC
    Je souhaiterais intégrer a ma requête de stocks le nom des auteurs (utilisé dans la première requête). Comment faire ?

    Par avance merci de votre aide, je n'y connais rien en SQL ...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    je n'y connais rien en SQL ...
    On s'en ai rendu compte rien qu'à lire tes requêtes.
    Ce qu'il te faut c'est une jointure:
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    D'abord une requete strictement equivalente à ta deuxième requetes, en utilisant des jointures standard.
    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
    SELECT   cdfam        ,
             libfam       ,
             produit.cdpdt,
             libpdt       ,
             qtesto       ,
             nomeditr
    FROM     produit
             INNER JOIN stock_pdt_site
             ON       produit.cdpdt = stock_pdt_site.cdpdt
             INNER JOIN editeur
             ON       editeur.cdeditr = produit.cdeditr
             INNER JOIN famille
             ON       famille.cdfam = produit.cdfam
    WHERE    cdtypsto               = 'D'
    AND      qtesto                <> 0
    ORDER BY qtesto DESC
    Et pour avoir le nom de l'auteur en plus il y a deux jointures de plus
    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
    SELECT   cdfam        ,
             libfam       ,
             produit.cdpdt,
             libpdt       ,
             qtesto       ,
             nomeditr     ,
             nomaut
    FROM     produit
             INNER JOIN stock_pdt_site
             ON       produit.cdpdt = stock_pdt_site.cdpdt
             INNER JOIN editeur
             ON       editeur.cdeditr = produit.cdeditr
             INNER JOIN famille
             ON       famille.cdfam = produit.cdfam
             INNER JOIN pdt_auteur
             ON       pdt_auteur.numaut = auteur.numaut
             INNER JOIN auteur
             ON       pdt_auteur.numaut = auteur.numaut
             AND      numordre          = 1
    WHERE    cdtypsto                   = 'D'
    AND      qtesto                    <> 0
    ORDER BY qtesto DESC
    Essaie de lire le tutoriel que je t'ai conseillé, et de comprendre tes requêtes et les miennes avant de continuer.
    Parce que la jointure c'est quand même le b-a , ba du SQL

    A+
    Soazig

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    merci soazig pour ta réponse.

    J'ai testé aujourd'hui ta requête et elle ne fonctionne pas. J'ai le message d'erreur suivant :

    Server '4', Line 1:
    Adaptive Server cannot perform the requested action because column 'numaut' is not within the scope of the joined table expression. Check your command for missing or incorrect database objects, variable names, and/or input data.

    Une idée ?

    Par avance merci pour le coup de main.

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par Svodoll Voir le message
    merci soazig pour ta réponse.

    J'ai testé aujourd'hui ta requête et elle ne fonctionne pas. J'ai le message d'erreur suivant :

    Server '4', Line 1:
    Adaptive Server cannot perform the requested action because column 'numaut' is not within the scope of the joined table expression. Check your command for missing or incorrect database objects, variable names, and/or input data.

    Une idée ?

    Par avance merci pour le coup de main.
    Bonjour,

    Vous avez donc seulement executé sa proposition, puis copié / collé ici le message d'erreur ?

    Lisez 30 seondes la requête, regardez le descriptif de vos tables (le noms des colonnes en particulier), le message d'erreur et vous trouverez d'où vient le problème...

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par soazig Voir le message
    D'abord une requete strictement equivalente à ta deuxième requetes, en utilisant des jointures standard.
    Ce n'est pas "strictement" équivalent : pour ça il faudrait utiliser des LEFT OUTER JOIN, car la requête initiale (utilisant des requêtes scalaires) ramènera les lignes même si la requête scalaire ne ramène que NULL.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    Vous avez donc seulement executé sa proposition, puis copié / collé ici le message d'erreur ?

    Lisez 30 seondes la requête, regardez le descriptif de vos tables (le noms des colonnes en particulier), le message d'erreur et vous trouverez d'où vient le problème...
    Le problème est que je n'ai pas accès a tout cela, j'ai juste mes requêtes. et je n'y connais absolument rien en sql, d’où ma demande d'aide ...

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Soit, votre erreur est spécifique à sybase qui ne permet pas de référencer, dans les jointures, une colonne d'une table jointe présente dans une jointure qui se situe après son rang de jointure (je sais pas si c'est clair ?).

    Là en l’occurrence si on reprend la requête de Soazig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ......
             INNER JOIN pdt_auteur
              ON       pdt_auteur.numaut = auteur.numaut
             INNER JOIN auteur
              ON       pdt_auteur.numaut = auteur.numaut
              AND      numordre          = 1
    ...
    Cette jointure est donc rejetée car on fait une jointure sur auteur.numaut alors que cette colonne appartient à la table auteur.

    Ceci implique en fait qu'il y a effectivement un problème avec la requête de Soazig car elle ne fait pas une jointure correct avec la table pdt_auteur.
    Il faudrait plutôt faire la jointure entre cette table et la table produit.


    Je vous laisse recouper avec votre 1ere requête pour trouver les colonnes de jointures.

    edit: et par la même occasion vous pourriez aussi mettre en place la remarque de Rei Ichido qui était pertinente.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    bonjour,
    Voilà j'ai corrigé mon erreur et mis des jointures externes.
    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   cdfam        ,
             libfam       ,
             produit.cdpdt,
             libpdt       ,
             qtesto       ,
             nomeditr     ,
             nomaut
    FROM     produit
             INNER JOIN stock_pdt_site
             ON       produit.cdpdt = stock_pdt_site.cdpdt
             left outer JOIN editeur
             ON       editeur.cdeditr = produit.cdeditr
             INNER JOIN famille
             ON       famille.cdfam = produit.cdfam
             left outer JOIN pdt_auteur
             ON        histo_ventes.cdpdt = pdt_auteur.cdpdt
             left outer JOIN auteur
             ON       pdt_auteur.numaut = auteur.numaut
             AND      numordre          = 1
    WHERE    cdtypsto                   = 'D'
    AND      qtesto                    <> 0
    ORDER BY qtesto DESC
    parce que je n'aime pas poster des âneries, mais j'aimerais bien que Svodoll tu essaies de comprendre ces requêtes.
    je n'y connais absolument rien en sql,
    Oui mais quel est ton job?
    Pourquoi dois tu corriger cette requête.
    Il faudra peut-être que tu apprennes le sql, car tu ne trouveras pas toujours une brave c... pour faire tes requêtes à ta place.
    Pour apprendre le sql le site que je t'ai cité est un bon début, y as-tu jeté un coup d'oeil, ou as-tu attendu qu'on te donne la réponse ?

    D'un autre côté si tu n'auras jamais d'autres requêtes à faire, on peut en rester là.
    A+
    Soazig

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Suffit de regardez l'historique de ses msg pour comprendre qu'il n'en a strictement rien a foutre de cette partie de son job, et utilise les forums pour réaliser son taf +

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    merci pour vos réponses.

    En effet, je ne suis pas supposé utiliser sql dans mon boulot, d'ou mon absence de formation a ce sujet. Je l'utilise extrêmement ponctuellement, mais cela n'est pas mon travail.

    Je vais néanmoins suivre vos conseils et lire les lien que vous m'avez mis en copie.

    Encore merci pour votre aide.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2014, 19h25
  2. Réponses: 0
    Dernier message: 11/10/2013, 14h57
  3. Recherche livre pour gestion et analyse des données
    Par tatane355 dans le forum Excel
    Réponses: 4
    Dernier message: 04/05/2013, 10h25
  4. Le topic des ventes de livre 2D, 3D, Jeux !
    Par Bakura dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 12/03/2011, 14h12
  5. Analyse des ventes perdues
    Par cedwat dans le forum Autres Solutions d'entreprise
    Réponses: 1
    Dernier message: 04/06/2009, 18h03

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