Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/06/2011, 18h55   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 77
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 77
Points : 28
Points : 28
Par défaut Fusionner des lignes qui ont les mêmes valeurs d'un champ

Bonjour,

J'ai une table qui peut avoir des redondances des données et je souhaite les fusionner.
Ma table est de la forme : T(id, name, qty)

Elle peut contenir des données du genre :
(1, a, 2)
(2, a, 3)


et je souhaite avoir une seule ligne qui contient la somme des qty pour le même name
par exemple (1, a, 5) .

Pouvez vous m'aider à construire la requête.

Merci d'avance.
EAKOM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 19h00   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Code :
1
2
3
SELECT min(id) id, name, sum(qty)
FROM T
GROUP BY name
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/06/2011, 09h35   #3
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 77
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 77
Points : 28
Points : 28
Merci pour votre réponse.

Votre solution résout une partie du problème. Je souhaite également supprimer les anciennes lignes.

Exemple :
Je souhaite garder dans la table la ligne (1, a, 5)
et supprimer les lignes (1, a, 2) et (2, a, 3).

Peut-on le faire sans passer par une table intermédiaire?
EAKOM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 11h13   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
On peut le faire en une commande avec MERGE :
Code :
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
36
37
38
39
40
41
CREATE TABLE t (id number(1), name varchar2(1), qty number(1))
-- Table created.
 
INSERT INTO t VALUES (1, 'a', 2);
-- 1 row created.
 
INSERT INTO t VALUES (2, 'a', 3);
-- 1 row created.
 
commit;
-- Commit complete.
 
SELECT * FROM t;
        ID N        QTY
---------- - ----------
         1 a          2
         2 a          3
-- 2 rows selected.
 
 merge INTO t t1
 USING (  SELECT min(id) AS id
               , name
               , sum(qty) AS qty
            FROM t
        GROUP BY name) t2
    ON (t2.name = t1.name)
  when matched then
UPDATE SET t1.qty = t2.qty
DELETE WHERE (t1.id <> t2.id);
-- 2 rows selected.
-- Merge successfully completed.
 
SELECT * FROM t;
 
        ID N        QTY
---------- - ----------
         1 a          5
-- 1 row selected.
 
DROP TABLE t;
-- Table dropped.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 17h41   #5
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 77
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 77
Points : 28
Points : 28
Merci votre réponse
EAKOM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h01.


 
 
 
 
Partenaires

Hébergement Web