fusion de tuples

fusion de tuples - SQL/NoSQL - Programmation

Marsh Posté le 29-12-2003 à 14:48:06    

Hello,
 
Je voudrais fusionner des doublons.
Cad:
Faire la somme des valeurs de chacun des doublons.
Supprimer les doublons pour n'avoir qu'un tuple unique avec cette somme calculée.
 
je connais les champs sur lesquels il y a des doublons grace à la requete suivante:
 
"SELECT codart FROM table group by codart having count(*)>1"
 
Merci

Reply

Marsh Posté le 29-12-2003 à 14:48:06   

Reply

Marsh Posté le 29-12-2003 à 15:02:08    

Si c'est juste 1 fois (manip à la main) :
 
(sinon faut faire un script PL/SQL ou une procédure)
 
Tu récupères les codart dans une table :
 
create table tmp as select codart from table group by codart having count(*)>1 ;
 
ensuite tu crées les enregistrements dans une table 2
 
create table tmp2 as select codart, champ1, champ2, ..., sum(champ_a_somme) from table where codart in (select codart from tmp) group by codart, champ1, champ2, ... ;
 
ensuite tu effaces les enreg de ta table
 
delete table where codart in (select codart from tmp) ;
 
ensuite tu réintègres les données sommées
 
insert into table (codart, champ1, champ2, ..., champ_a_somme) select * from tmp2 ;
 
et pour finir un
 
commit ;
 
Voilà, ca devrait faire l'affaire. N'oublie pas de champs en route...
 
L'idéal si tu as peur de faire une bétise c'est avant tout de faire un
 
create table save as select * from table ;


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 29-12-2003 à 16:04:22    

logiquement, y'a un sum() aussi dans la première requête pour faire la somme.

Reply

Marsh Posté le 29-12-2003 à 16:09:52    

MagicBuzz a écrit :

logiquement, y'a un sum() aussi dans la première requête pour faire la somme.


 
d'où le create table tmp2 as select codart, champ1, champ2, ..., sum(champ_a_somme) :D


Message édité par bill.fr le 30-12-2003 à 17:01:19

---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 29-12-2003 à 16:14:30    

j'avais pas vu :)
 
autant tout faire en une passe ;)

Reply

Marsh Posté le 29-12-2003 à 16:16:32    

Je suis d'accord, mais c'est pour bien expliquer, comme ça étape par étape on voit tout ce qui va bien...
 
 
au fait comment on fait italique et gras déjà comme balises ?


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 29-12-2003 à 17:26:38    

[ b ] et [ i ]
 
enfin... dans le forum ?
si c'est pour le HTML, c'est pareil, mais des < et > à la place des [ et ] :D En SQL on peut pas :D
 
sinon, au lieu d'utiliser "réponse rapide", utilise plutôt le bouton "répondre", comme ça t'as les titi boutons jolis qui font les tags tous seuls comme des grands quand tu cliques dessus ;)

Reply

Marsh Posté le 29-12-2003 à 17:51:37    

bill.fr a écrit :

Si c'est juste 1 fois (manip à la main) :
 
(sinon faut faire un script PL/SQL ou une procédure)
 
Tu récupères les codart dans une table :
 
create table tmp as select codart from table group by codart having count(*)>1 ;
 
ensuite tu crées les enregistrements dans une table 2
 
create table tmp2 as select codart, champ1, champ2, ..., sum(champ_a_somme) from table where codart in (select codart from tmp) group by codart, champ1, champ2, ... ;
 
ensuite tu effaces les enreg de ta table
 
delete table where codart in (select codart from tmp) ;
 
ensuite tu réintègres les données sommées
 
insert into table (codart, champ1, champ2, ..., champ_a_somme) select * from tmp2 ;
 
et pour finir un
 
commit ;
 
Voilà, ca devrait faire l'affaire. N'oublie pas de champs en route...
 
L'idéal si tu as peur de faire une bétise c'est avant tout de faire un
 
create table save as select * from table ;


 
Ok tres bien ! tout a fait daccord bill.fr.
Il me faut donc faire une procédure stockée qui fait tout ça ....
 c'est pas du gateau!
 
 merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed