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 :

[Oracle] Problème requête somme


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut [Oracle] Problème requête somme
    Je souhaiterais avoir de l'aide pour l'élaboration d'une requête SQL.
    Actuellement la requête permet de visualiser les prévisions saisies, les commandes passées et les prévisons disponibles classées par article et par date. Je voudrais rajouter chaque mois la somme de ces trois chiffres pour chaque article.

    Voici la requête initiale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select
    to_char(f.ms_date,'yyyy/mm/dd') "Date dispo"
    , f.part_no "Reference"
    , s.catalog_desc "Designation"
    , f.forecast_lev1 "Prevision glogale"
    , f.consumed_forecast "Cdes saisies"
    , f.unconsumed_forecast  "Prevision dispo"
      from ifsapp.level_1_forecast f, ifsapp.sales_part s  
     where f.part_no = s.part_no 
       and f.forecast_lev1<>0 
       and s.catalog_group like upper('&Famille%') 
       and f.part_no like upper('&Reference%')
     order by "Reference", "Date dispo"

    Merci d'avance.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut, et bienvenue sur ce forum,

    Si j'ai bien compris, tu veux faire un regroupement par mois, et cumuler 3 champs. Est-ce que ce qui suit te convient ?

    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
    to_char(f.ms_date,'yyyy/mm') "Mois dispo"
    , f.part_no "Reference"
    , s.catalog_desc "Designation"
    , SUM(f.forecast_lev1) "Somme Prevision glogale"
    , SUM(f.consumed_forecast) "Somme Cdes saisies"
    , SUM(f.unconsumed_forecast) "Somme Prevision dispo"
    , SUM(f.forecast_lev1 + f.consumed_forecast + f.unconsumed_forecast) "Somme Totale"
      from ifsapp.level_1_forecast f, ifsapp.sales_part s 
     where f.part_no = s.part_no
       and f.forecast_lev1 <> 0
       and s.catalog_group like upper('&Famille%')
       and f.part_no like upper('&Reference%')
     GROUP BY to_char(f.ms_date,'yyyy/mm'), f.part_no, s.catalog_desc
     order by "Reference", "Mois dispo"
    Si tu bosses avec Oracle 9 ou supérieur, tu peux utiliser les jointures normalisées (avec INNER JOIN)

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai testé la requête mais elle ne marche pas.
    J'utilise une base Oracle est-ce qu'il faut modifier la requête?

    Merci.

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par baptus
    J'ai testé la requête mais elle ne marche pas.
    Peux-tu être plus précis STP en indiquant le message d'erreur détaillé, je n'ai pas testé la requête que j'ai posté faute de ne pas avoir de script permettant de la tester.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Voici le message d'erreur fournit par l'ERP lors de l'exécution de ma requête. Je ne comprend pas pourquoi elle ne marche pas. La requête a l'air correcte.




    Level: Informational
    Code: ???-967:
    Location: __tbwQuickReport
    Text: known error 967
    Error Text:
    select to_char(f.ms_date,'yyyy/mm') "Mois dispo" , f.part_no "Reference" , s.catalog_desc "Designation" , SUM(f.forecast_lev1) ^"Somme Prevision glogale" , SUM(f.consumed_forecast) "Somme Cdes saisies" , SUM(f.unconsumed_forecast) "Somme Prevision dispo" , SUM(f.forecast_lev1 + f.consumed_forecast + f.unconsumed_forecast) "Somme Totale" from ifsapp.level_1_forecast f, ifsapp.sales_part s where f.part_no = s.part_no and f.forecast_lev1 <> 0 and s.catalog_group like upper('%') and f.part_no like upper('00750%') GROUP BY to_char(f.ms_date,'yyyy/mm'), f.part_no, s.catalog_desc order by "Reference", "Mois dispo"

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 95
    Points
    95
    Par défaut
    C'est peut-^^^^^^etre ¨^^^^^^dans l'expression :
    SUM(f.forecast_lev1) ^"Somme Prevision glogale" ????

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    La requête pour sommer les valeurs marche.


    select to_char(f.ms_date,'mm/yyyy') "Date dispo", f.part_no "Reference", s.catalog_desc "Designation", SUM(f.unconsumed_forecast) "Somme dispo", SUM(f.consumed_forecast) "Somme com saisies", SUM(f.forecast_lev1) "Somme prev globale" from ifsapp.level_1_forecast f, ifsapp.sales_part s where f.part_no=s.part_no and f.forecast_lev1<>0 and s.catalog_group like upper('&Famille%') and f.part_no like upper('&Reference%') group by to_char(f.ms_date,'mm/yyyy'), f.part_no, s.catalog_desc order by "Reference", "Date dispo"

    Est-ce qu'il est possible d'obtenir, avec une même requête les quantités par date et par référence et d'avoir ensuite leurs sommes à chaque fin de mois. Merci d'avance.

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne lis pas les requêtes qui ne sont pas dans des balises Code ni indentées, mais à ta question
    Est-ce qu'il est possible d'obtenir, avec une même requête les quantités par date et par référence et d'avoir ensuite leurs sommes à chaque fin de mois. Merci d'avance
    La réponse est oui, avec GROUP BY CUBE ou GROUP BY ROLLUP

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé d'utiliser les deux solutions mais cela ne marche pas.
    Est-ce qu'il ne serait pas possible d'utiliser la requête qui somme les valeurs par mois et la requête qui donne le détail par date (avec le jour) en une seule requête pour avoir une vision d'ensemble?

  10. #10
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Avec une fonction analytique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT IDENT,
           MONTANT,
           TO_CHAR(DATE_VERSEMENT,'YYYY-MM') MOIS,
           SUM(MONTANT) OVER (PARTITION BY TO_CHAR(DATE_VERSEMENT,'YYYYMM')) MONTANT_MOIS
    FROM VERSEMENT
    A lire :

    http://lalystar.developpez.com/fonctionsAnalytiques/

    Bloon

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai réussi à faire une requête qui visualise le détail des valeurs mais également la somme des valeurs sur une période d'un mois et par référence. Le problème est que la somme et le détail des valeurs apparaissent sur une même ligne.
    En fait, je souhaiterais avoir pour chaque référence le détail des valeurs classées par date et qu'à chaque fin de mois la somme apparaisse sur une ligne séparée.

    Voici la requête que j'ai utilisé.

    select to_char(f.ms_date,'dd/mm/yyyy') "Date dispo", f.part_no "Reference", s.catalog_desc "Designation", f.unconsumed_forecast "Prévision dispo", f.consumed_forecast "Commandes saisies", f.forecast_lev1 "Prévision globale", SUM(f.unconsumed_forecast) over (partition by to_char(f.ms_date,'mm/yyyy'), f.part_no, s.catalog_desc order by to_char(f.ms_date,'mm/yyyy')) "Somme dispo", SUM(f.consumed_forecast) over (partition by to_char(f.ms_date,'mm/yyyy'), f.part_no, s.catalog_desc order by to_char(f.ms_date,'mm/yyyy')) "Somme com saisies", SUM(f.forecast_lev1) over (partition by to_char(f.ms_date,'mm/yyyy'), f.part_no, s.catalog_desc order by to_char(f.ms_date,'mm/yyyy')) "Somme prev globale" from ifsapp.level_1_forecast f, ifsapp.sales_part s where f.part_no=s.part_no and f.forecast_lev1<>0 and s.catalog_group like upper('&Famille%') and f.part_no like upper('&Reference%') order by "Reference"

  12. #12
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Tu veux obtenir ce résultat :

    01/01/2006 AAA 12
    02/01/2006 BBB 13
    03/01/2006 CCC 14
    Total 01/2006 39
    01/02/2006 AAA 3
    10/02/2006 CCC 8
    Total 02/2006 11

    :

    Bloon

  13. #13
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui c'est exactement ce résultat que je veux obtenir.

  14. #14
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Normalement le SQL n'est pas fait pour renvoyer des types de lignes différents, cependant on peut toujours ruser :

    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
    SELECT MOIS,DATE_VERSEMENT,CODE,MONTANT
    FROM (
    SELECT '01' TYPE_LIGNE,
           TO_CHAR(DATE_VERSEMENT,'YYYY-MM') MOIS,
           DATE_VERSEMENT,
           CODE,
           MONTANT
    FROM VERSEMENT
    UNION ALL
    SELECT '02' TYPE_LIGNE,
           TO_CHAR(DATE_VERSEMENT,'YYYY-MM') MOIS,
           NULL,
           'TOTAL POUR ' || TO_CHAR(DATE_VERSEMENT,'YYYY-MM'),
           SUM(MONTANT)
    FROM VERSEMENT
    GROUP BY TO_CHAR(DATE_VERSEMENT,'YYYY-MM')
    )
    ORDER BY MOIS, TYPE_LIGNE, DATE_VERSEMENT
    Mais bon, c'est pas top

    Bloon

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par baptus
    J'ai essayé d'utiliser les deux solutions mais cela ne marche pas.
    Impossible de t'aider avec autant d'information

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT to_char(r,   'YYYYMM'),  r,  COUNT(*)
    FROM dvp_groupby
    GROUP BY ROLLUP (to_char(r,   'YYYYMM'),   r)
    la table dvp_groupby ne contient qu'une colonne de type date et nommée r.

    et le résultat :
    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
    200603	2006-03-20	1
    200603	2006-03-21	1
    ....
    200603	2006-03-29	1
    200603	2006-03-30	1
    200603	2006-03-31	1
    200603			      12
    200604	2006-04-01	1
    200604	2006-04-02	1
    ....
    200604	2006-04-29	1
    200604	2006-04-30	1
    200604			      30
    200605	2006-05-01	1
    200605	2006-05-02	1
    ...
    200605	2006-05-30	1
    200605	2006-05-31	1
    200605			      31
    200606	2006-06-01	1
    200606	2006-06-02	1
    ...
    200606	2006-06-26	1
    200606	2006-06-27	1
    200606			      27
    			           100
    Donc, pour moi, cela marche

  16. #16
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé de faire une requête en fonction de l'exemple précédent mais elle ne marche pas.

    La voici:

    select to_char(f.ms_date,'dd/mm/yyyy') "Date dispo", f.part_no "Reference", s.catalog_desc "Designation",SUM(f.forecast_lev1) "Somme Prevision glogale", SUM(f.consumed_forecast) "Somme Cdes saisies"FROM ((SELECT '01' TYPE_LIGNE, to_char(f.ms_date,'dd/mm/yyyy') "Date dispo", f.part_no "Reference", s.catalog_desc "Designation" FROM ifsapp.level_1_forecast f, ifsapp.sales_part s where f.part_no = s.part_no and f.forecast_lev1 <> 0 and s.catalog_group like upper('&Famille%') and f.part_no like upper('&Reference%') UNION ALL SELECT ('02' TYPE_LIGNE, to_char(f.ms_date,'dd/mm/yyyy') "Mois dispo" , NULL, TOTAL POUR ' || to_char(f.ms_date,'mm/yyyy') "Mois dispo", SUM(f.forecast_lev1) "Somme Prevision glogale", SUM(f.consumed_forecast) "Somme Cdes saisies", SUM(f.unconsumed_forecast) "Somme Prevision dispo"
    FROM ifsapp.level_1_forecast f, ifsapp.sales_part s where f.part_no = s.part_no and f.forecast_lev1 <> 0 and s.catalog_group like upper('&Famille%') and f.part_no like upper('&Reference%') GROUP BY to_char(f.ms_date,'mm/yyyy') "Mois dispo", f.part_no, s.catalog_desc))) order by "Reference", to_char(f.ms_date,'dd/mm/yyyy')

    Je ne vois pas où est le problème

  17. #17
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    je pense que si tu continues à ne pas faire d'efforts sur le mise en forme de tes requêtes, tu vas décourager tous les bénévoles qui essayent de t'aider ...

    Utilise les balises codes, mets les mots-clés en majuscules et indente un peu, c'est tout de même beaucoup plus lisible, non ?

    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
    SELECT to_char(f.ms_date,'dd/mm/yyyy') "Date dispo", f.part_no "Reference", 
           s.catalog_desc "Designation",
           SUM(f.forecast_lev1) "Somme Prevision glogale",
           SUM(f.consumed_forecast) "Somme Cdes saisies"
      FROM ((SELECT '01' TYPE_LIGNE, to_char(f.ms_date,'dd/mm/yyyy') "Date dispo", 
                    f.part_no "Reference", s.catalog_desc "Designation" 
               FROM ifsapp.level_1_forecast f, ifsapp.sales_part s 
              WHERE f.part_no = s.part_no 
                AND f.forecast_lev1 <> 0 
                AND s.catalog_group like upper('&Famille%') 
                AND f.part_no like upper('&Reference%') 
              UNION ALL 
             SELECT ('02' TYPE_LIGNE, TO_CHAR(f.ms_date,'dd/mm/yyyy') "Mois dispo" , 
                    NULL, TOTAL POUR ' || to_char(f.ms_date,'mm/yyyy') "Mois dispo",                    
                    SUM(f.forecast_lev1) "Somme Prevision glogale",
                    SUM(f.consumed_forecast) "Somme Cdes saisies", 
                    SUM(f.unconsumed_forecast) "Somme Prevision dispo"
               FROM ifsapp.level_1_forecast f, ifsapp.sales_part s 
              WHERE f.part_no = s.part_no 
                AND f.forecast_lev1 <> 0 
                AND s.catalog_group like upper('&Famille%') 
                AND f.part_no like upper('&Reference%') 
           GROUP BY to_char(f.ms_date,'mm/yyyy') "Mois dispo", f.part_no, s.catalog_desc))) 
     ORDER BY "Reference", to_char(f.ms_date,'dd/mm/yyyy')
    Je n'ai pas vérifié la validité d'une telle requête, des parenthèses me paraissent mal placées, tu as des alias identiques, etc. mais sans jeu d'essais pour tester, je suis out ...

  18. #18
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Médiat
    Je ne lis pas les requêtes qui ne sont pas dans des balises Code ni indentées.
    Xo >> Quel courage !

    Je ne vois pas de ROLLUP dans cette requête, quel rapport avec l'exemple précédent ?

  19. #19
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par Médiat
    Je ne vois pas de ROLLUP dans cette requête, quel rapport avec l'exemple précédent ?
    Il a pris mon exemple sans le ROLLUP.

    Bloon

  20. #20
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par baptus
    J'ai essayé de faire une requête en fonction de l'exemple précédent mais elle ne marche pas.
    Il y a un message d'erreur ou bien le résultat n'est pas bon ?

    La voici:
    Utilise les balises [code][/code] !

    Bloon

Discussions similaires

  1. Problème de somme avec requête mysql
    Par breizhlama dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/06/2010, 20h28
  2. Problème de somme type "1+0=0" dans une requête
    Par Rmiid dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/06/2008, 06h50
  3. Problème requête Oracle
    Par newmar dans le forum SQL
    Réponses: 1
    Dernier message: 28/05/2008, 07h45
  4. Problème requête SELECT ORACLE
    Par vizlebiz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2008, 16h20
  5. Réponses: 6
    Dernier message: 20/09/2004, 15h26

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