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

Langage SQL Discussion :

Requete sur une table de faits


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Requete sur une table de faits
    Bonjour,

    Voila mon problème:
    Imaginons que j'ai une table de faits VENTES qui contient les champs suivants:
    - Date
    - article
    - magasin
    - nb_ventes

    Je souhaite créer une requête me permettant d'obtenir un tableau croisé comme ceci:

    +------------------------------------------------+
    |_________| article 1 | article 2 | article 3 | Total |
    |magasin 1 |________|________|_________|_____|
    |magasin 2 |________|________|_________|_____|
    |magasin 3 |________|________|_________|_____|
    |Total_____|________|________|_________|_____|
    +------------------------------------------------+
    (désolé pour le graphisme!)

    Ce tableau doit m'indiquer le nombre moyen PAR JOUR d'article vendu par magasin.

    J'ai tenté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ventes.article, ventes.magasin, sum(nb_ventes)
    FROM ventes
    group by ventes.article, ventes.magasin
    Mais bien évidemment cela ne prend pa en compte la moyenne par jour!

    J'ai testé d'autre choses avec des group by id_jour, des avg(....) mais ca ne marche pas. De plus il ne faut pas que la structure de ma clause select change.

    La seule solution que j'ai trouvé c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ventes.article, ventes.magasin, sum(nb_ventes)/nb_jour
    FROM ventes
    group by ventes.article, ventes.magasin
    Mais ca ne me semble pas optimisé parce que le nb_jour est assez compliqué a trouvé dans mon cas.

    Merci d'avance pour vos suggestions!

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Tu est sous quel SGBD ?
    Ta colonne Date est "Date/heure" ?

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    C'est sur oracle

    Et mon champ date est de type DATE (type d'oracle) donc je crois qu'il contient les heures minutes secondes.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut,

    Citation Envoyé par markoBasa Voir le message
    De plus il ne faut pas que la structure de ma clause select change.
    Je comprends pas très bien cette phrase.

    Sinon rajoute la date dans ton select et ton group by pour avoir le nombre par jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT v.magasin, v.article,trunc(v.tadate) as jour, sum(v.nb_ventes) as nb_vente
    FROM ventes v
    group by v.magasin,v.article,trunc(v.tadate)
    Par contre cette requête est loin de donner le tableau que tu décrits.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Cette phrase veut justement dire de ne pas rajouter un autre champ dans le select.

    donc cette requete ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT v.magasin, v.article,trunc(v.tadate) AS jour, sum(v.nb_ventes) AS nb_vente
    FROM ventes v
    GROUP BY v.magasin,v.article,trunc(v.tadate)
    En plus elle ne donne pas la moyenne journalière

  6. #6
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    essai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select tmp.article, tmp.magasin, tmp.moyenne
    from
    (SELECT ventes.article, ventes.magasin, trunc(ventes.date), avg(nb_ventes) as moyenne
    FROM ventes
    group by ventes.article, ventes.magasin, trunc(ventes.date)) tmp
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    En fait il y a deux solution:

    1- solution que j'ai mise dans mon premier post
    2- la solution précédente de Z3phur mais il faut rajouter quelques trucs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT tmp.article, tmp.magasin, avg(tmp.moyenne)
    FROM
    (SELECT ventes.article, ventes.magasin, trunc(ventes.date), sum(nb_ventes) AS moyenne
    FROM ventes
    GROUP BY ventes.article, ventes.magasin, trunc(ventes.date)) tmp
    GROUP BY tmp.article, tmp.magasin
    Je trouve quand même que c'est un peu lourd et je pense qu'il y a plus optimisé. Mais bon tant pis ça fonctionne.

    Merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2009, 19h09
  2. Requete sur une table dans mon projet
    Par sboffin dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/01/2009, 12h26
  3. [MySQL] Requete sur une table
    Par pierre50 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/09/2007, 18h30
  4. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 15h07
  5. Requete sur une table qui pointe 2 fois sur une autre
    Par Satch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/01/2006, 08h48

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