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

SQL Oracle Discussion :

Total de prix sur un article


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut Total de prix sur un article
    j'ai essayé de trouver le total de prix des factures pour chaque articlemais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00937: la fonction de groupe ne porte pas sur un groupe simple.
    la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  a.ref_article, a.libelle, f.numero_facture, f.date_facture, f.prix, sum(f.prix) as total
    FROM article a , fact_art fa , facture f
    WHERE (a.id_article = fa.id_article)
    and f.id_facture= fa.id_facture
    )t
     
    group by a.ref_article, a.libelle, f.numero_facture, f.date_facture
    Le problème c'est que je n'arrive pas à sélectionner le prix total par article

    Merci pour vos propositions

  2. #2
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 442
    Par défaut
    Bonjour,
    Tu sélectionnes f.prix & sum(f.prix)
    or f.prix n'est pas dans la clause group by, il y a donc échec.
    En résumé, toutes les colonnes sélectionnées doivent :
    - soit servir à une fonction d'agrégat max(), min(), sum(), avg(), count()
    - soit figurer dans la clause group by

    Ta requête pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  a.ref_article, a.libelle, f.numero_facture, f.date_facture, sum(f.prix) AS total
    FROM article a , fact_art fa , facture f
    WHERE (a.id_article = fa.id_article)
    AND f.id_facture= fa.id_facture
    GROUP BY a.ref_article, a.libelle, f.numero_facture, f.date_facture
    Si c'est bien ce que tu cherches...
    Car attention, une requête syntaxiquement correcte est toujours susceptible de ramener des résultats... Faut-il encore que les résultats correspondent à ceux qu'on attend

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut
    Merci pour ta réponse.

    J'ai besoin du prix de la facture.

    Exemple :

    pour deux article A et B:

    L'article A a deux factures : f1-12/12/2012-100.5 et f2-25/12/2012-110.5
    L'article B a deux factures : f3-15/12/2012-100 et f4-28/12/2012-110

    Donc comme résultat je cherche comment afficher

    A
    f1-12/12/2012-100.5
    f2-25/12/2012-110.5
    total : 211.

    B
    f3-15/12/2012-100
    f4-28/12/2012-110
    total : 210.

  4. #4
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 442
    Par défaut
    Bon, sous toutes réserves car :
    1 - je n'ai pas de base pour tester,
    2 - ça fait plus de 10 ans que je n'ai pas touché à une base, je me suis arrêté avec la 8i !
    3 - que ça me démange de reprendre pour taquiner mon neurone
    4 - et qu'avec ce beau soleil il doit y avoir peu de monde présent pour faire du SQL...

    J'ai un peu modifié la requête pour la faire correspondre à mes vieux souvenir... je ne suis plus sûr de la syntaxe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    column ByFacture format 9,999.99
    column ByTotal   format 9,999.99
    break sum of a.libelle skip 1
    compute sum of ByFacture on a.libelle
    compute sum of ByTotal on a.libelle
     
    SELECT  a.libelle, a.ref_article, f.numero_facture, f.date_facture, f.prix, ByFacture, ByTotal
    FROM article a , fact_art fa , facture f
    WHERE (a.id_article = fa.id_article)
    AND f.id_facture= fa.id_facture
    GROUP BY a.ref_article, a.libelle, f.numero_facture, f.date_facture
    ORDER BY a.libelle;
    On doit pas être très loin de la solution...
    J'espère que ça te parle un peu...

    PS: Si c'est l'exo à rendre demain sans faute à 9h00, fais l'effort de t'investir un peu... sinon le jour de l'exam tu seras vite largué

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut
    je sais que c'est un peu difficile de trouver la solution mais il y a toujours des solutions pour les problèmes.

    Le problème c'est d'afficher comme suit:

    pour deux article A et B:

    L'article A a deux factures : f1-12/12/2012-100.5 et f2-25/12/2012-110.5
    L'article B a deux factures : f3-15/12/2012-100 et f4-28/12/2012-110

    Donc comme résultat je cherche comment afficher

    A-f1-12/12/2012-100.5
    A-f2-25/12/2012-110.5
    total : 211.

    B-f3-15/12/2012-100
    B-f4-28/12/2012-110
    total : 210.

  7. #7
    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


    essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT  a.ref_article, a.libelle, f.numero_facture, f.date_facture, sum(f.prix) OVER (PARTITION BY a.ref_article) AS total
    FROM article a , fact_art fa , facture f
    WHERE a.id_article = fa.id_article
    AND f.id_facture= fa.id_facture

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select 'A' As article, 'f1-12/12/2012' As num_facture, 100.5 As Prix from dual union all
      3    Select 'A' As article, 'f2-25/12/2012' As num_facture, 110.5 As Prix from dual union all
      4    Select 'B' As article, 'f3-15/12/2012' As num_facture, 100 As Prix from dual union all
      5    Select 'B' As article, 'f4-28/12/2012' As num_facture, 110 As Prix from dual
      6  )
      7  Select Case
      8           When Grouping(num_facture) = 0 Then Article
      9           When Grouping(article) = 1 Then 'Total General'
     10           Else 'Total '||Article
     11         End As Article,
     12         num_facture,
     13         sum(prix) Prix
     14    From data
     15   Group By Rollup(article, num_facture)
     16  /
     
    ARTICLE       NUM_FACTURE         PRIX
    ------------- ------------- ----------
    A             f1-12/12/2012      100,5
    A             f2-25/12/2012      110,5
    Total A                            211
    B             f3-15/12/2012        100
    B             f4-28/12/2012        110
    Total B                            210
    Total General                      421
     
    7 rows selected
     
    SQL>

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

Discussions similaires

  1. totale prix sur un panier
    Par new-root dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2011, 23h11
  2. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  3. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48

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