Bonjour,

SGBD: Ingres (oui c'est encore utilisé )
Je dispose de 2 tables :

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
 
Table ope_w :
 
Id   Montant   Code
---  --------  -----
1Z   21498,93  2101
S3   94523,84  2202
..   ........  ....
 
Table som_ope_w
 
Id   Somme     Somme_A  Somme_B
---  --------  -------  --------
1Z   21498,93  21498,93  0
S3   94523,84  94523,84  0
..   ........  ....
Le but de la requete que je cherche a creer est de remplir la table som_ope_w a partir de la table ope_w, en remplissant pour un Id donné la somme de tous les montants qu'il a, et dans Somme_A et Somme_B la somme des montants de cet Id pour certains codes specifiques

Ma 1ere idee etait de faire ceci avec une premiere d'insertion

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
insert into som_ope_w
select   id,
         sum(montant),
         0,
         0,
         0
from     ope_w
group by id
Puis differentes requetes d'update pour completer

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
update som_ope_w
from ope_w g
set somme_a = sum(g.montant)
where g.code = '2101' or g.c_ope = '2203' // oui code est un char(4)
A ce point la, la 1ere requete fonctionne parfaitement, mais la 2eme echoue et j'ai un message d'erreur me disant qu'il n'est pas possible de mettre un sum dans un set
E_US0B70 line 1, aggregate function 'sum' not allowed in this context.
j'ai donc recherche un peu sur google et sur le forum , j'ai trouve quelques reponses interessantes, comme
http://www.developpez.net/forums/sho...d.php?t=181301
http://www.developpez.net/forums/showthread.php?t=84569
http://www.developpez.net/forums/showthread.php?t=81835

ou la reponse qui ressort a chaque fois et d'utiliser une requete du type

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
update xxx
from yyy
set a = (select sum(b) from c)
j'ai donc essaye d'appliquer cela a mes requetes, ce qui donne au choix directement dans le insert :

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
 
insert into som_ope_w
select id,
       (select   sum(montant)
        from     ope_w
        group by id),
       (select   sum(montant)
        from     ope_w
        where    ope_w.code = '2101'
        group by id),
       (select   sum(montant)
        from     ope_w
        where    ope_w.code = '2102'
        group by id),
from   ope_w
j'ai essaye cela, diverses combinaisans avec ou sans group by, avec ou sans from dans la requete principale, avec un seul champ mis a jour et les autres a 0 , bref rien n'y fait j'ai toujours un message d'erreur peu explicite
E_US09C5 line 1, Syntax error on 'select'. The correct syntax is:
(avec a la suite la syntaxe classique d'un select)

J'ai aussi essaye de faire la meme chose avec un update et un set somme_a = (select sum(montant) , mais ca me donne la meme erreur

Voila , desole pour l'enorme bloc de texte mais j'ai essaye de bien (trop ? ) detailler et de montrer que j'avais essaye et cherche pas mal avant de poster.

Merci de votre temps et de vos reponses