Une aide svp en sql

Bonjour,
je debut avec le sql (oracle8)
Jai deux table table1 et table2
table1 contient les rubriques (periode,montant_mensuel,numero)
periode = janvier fevrier mars...
table2 contient elle les rubriques (annee , montant_annee,numero)
je voudrais faire resortir le total mensuel par annee et par numero de la table1
avec la table2

voici ma requete

select substr(t1.periode,1,4) ,sum(t1.montant_Mensuel) , sum(t2.montant_annee),t1.numero from table1 t1,table2 t2  
where t1.numero = t2.numero  
and substr(t1.periode,1,4) = t2.annee  
group by t1.numero,substr(t1.periode,1,4) 
  
table1                                                    table2                
periode  montant_mensuel numero             annee     monatnt_annee  numero  
201001   12000.00        151  (janvier)     2010      19000.00        151  
201002    4000.00        151  (fevrier      2010      16500.00        152  
201003    2000.00        151  (mars         2010      12000.00        177  
201004    1000.00        151  (avril  
201001   12000.00        152  (janvier  
201002    4500.00        152    (fevrier  
201005   12000.00        177    (mai   
201006    4752.36        177    (juin      


mais le resultat lui est faux
par exemple pour le numero 151 en 2010 au lieu de 19000.00 jai 76000.00
et verifier que le numero 177 y a une diffrence entre les mois et l'annee
svp aidez moi a le resoudre

merci

8 réponses

  1. Bonjour,

    que veux tu faire exactement ? remplir la table2 à partir des infos de la table1 ?
    Car dans ta requête je ne comprend pas bien ce que tu veux afficher.
    1. Bonjour,

      j'ai du mal formulé ma question voila pour la table1 elle contient le detail mensuel des montant versé par client.
      exemple le client 151 doit pour l'annee 2010 une somme de 19000.00€ table2

      et table1 elle contient le details mensuel des versement par mois (jan fev mar avr... )

      et voila le resulat que je veux obtenir avec cette requete
      select substr(t1.periode,1,4)as annee ,sum(t1.montant_Mensuel)as total_mensuel , sum(t2.montant_annee)as montant_annee  ,t1.numero as numero_client  from table1 t1,table2 t2  
      where t1.numero = t2.numero  
      and substr(t1.periode,1,4) = t2.annee  
      group by t1.numero,substr(t1.periode,1,4) 
      
      exemple 
      
      annee      total_mensuel  montant_annee  numero_client
       2010       19000.00         19000.00            151        solde = 0 c'est ok
       2010       16752.36         12000.00            177        solde > 0 pas normale
       ...
      
       un autre cas peut se prensenter 
      si 
      
      annee  total_mensuel  montant_annee  numero_client
       1999   9000.00           19000.00            151    solde < 0 il doit encore 10000.00
      
      


      salutation et merci pour votre aide
      1. Et bien j'ai une réponse que j'ai faite sous postgresql, donc il faudra surement l'adapter pour oracle, de plus je ne connais pas le type exact de tes champs dans ta base du coup il est possible que l'analyseur syntaxique te dise que les tests ne sont pas bons car les champs n'ont pas le même type, il faudra alors les caster dans le type correspondant.

        Enfin voila une requête qui fonctionne chez moi :

        SELECT t2.annee, t1.total_mensuel, t2.montant_annee, t2.numero
        FROM table2 t2
        INNER JOIN (
        SELECT SUM(t3.montant_mensuel) as total_mensuel, id FROM (
        	SELECT  SUBSTR(periode,1,4)||numero as id, montant_mensuel, SUBSTR(periode,1,4) as annee, numero
        	FROM table1
        ) as t3 GROUP BY id) t1
        ON t2.numero::text = SUBSTR(id,5,6)
        AND t2.annee = SUBSTR(id,1,4)


        Si tu as des questions n'hésite pas ^^
        1. select t1.numero,annee,montant_annee, sum(montant_mensuel)
          from table1 t1,table2 t2
          where t1.numero = t2.numero
          group by t1.numero,annee,montant_annee

          tout simplement !
          1. select t1.numero,annee,montant_annee, sum(montant_mensuel)
            from table1 t1,table2 t2
            where t1.numero = t2.numero
            group by t1.numero,annee,montant_annee

            tout simplement !
            1. select t1.numero,annee,montant_annee, sum(montant_mensuel)
              from table1 t1,table2 t2
              where t1.numero = t2.numero
              group by t1.numero,annee,montant_annee

              tout simplement !
              1. select t1.numero,annee,montant_annee, sum(montant_mensuel)
                from table1 t1,table2 t2
                where t1.numero = t2.numero
                group by t1.numero,annee,montant_annee

                tout simplement !
                1. bonjour a tous et merci pour toute l'aide que vous m'apportez
                  pour la derniere requete elle marche bien j'ai les les soldes en plus ou en moins maintenat je suis confrenté a un autre probleme
                  c'est qu'il ya une rubrique de type date "journee"
                  et la table table2
                               
                                table2                
                   annee     montant_annee      numero  journee
                   2010        9000.00              151        20100102
                   2010        3000.00              151        20100302
                   2010        7000.00              151        20100602
                   2010        4800.00              151        20100604 erreur de saisie
                   2010       -4800.00              151       20100604 erreur de saisie 
                  
                  2010      16500.00              152  
                   2010      12000.00              177  


                  et le resultat de la requete uniquement pour le numero 151

                  annee      total_mensuel  montant_annee  numero_client
                  
                   2010       19000.00         9000.00            151 
                   2010       19000.00         3000.00            151 
                   2010       19000.00         7000.00            151 
                  ...
                  
                  J'aurai Voulu avoir comme resultat 
                  
                   2010       19000.00         19000.00            151 
                  quelque soit le nombre d'ecritures dans la table2
                  pour ceux qui en une seul ecriture dans la Table2 aucun souci
                  ça marche bien la requete