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 13/09/2011, 15h11   #1
Invité de passage
 
Homme David
Consultant informatique
Inscription : septembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Santé

Informations forums :
Inscription : septembre 2011
Messages : 2
Points : 2
Points : 2
Par défaut UPDATE incrémental par contenu

Bonjour,

Comment mettre à jour une colonne avec un compteur de ligne qui se réinitiallise pour chaque valeur ?
Par ex, la table :
A 0
B 0
A 0
A 0
C 0
B 0
A 0 ....
Devient :
A 1
B 1
A 2
A 3
C 1
B 2
A 4 ......

Ca parait facile mais je n'y arrive pas avec un simple sql UPDATE.
Si vous avez des pistes, je suis preneur.

Merci d'avance

David
Davidbe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 15h39   #2
Membre expérimenté
 
François
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 306
Points : 536
Points : 536
Par défaut L'oeil du faucon

Une grosse piste:
http://www.developpez.net/forums/d11...leurs-colonne/
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 15h46   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 813
Points : 5 813
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> CREATE TABLE test_upd AS
  2  SELECT 'A' id, 0 rank FROM dual union ALL
  3  SELECT 'B', 0 FROM dual union ALL
  4  SELECT 'A', 0 FROM dual union ALL
  5  SELECT 'A', 0 FROM dual union ALL
  6  SELECT 'C', 0 FROM dual union ALL
  7  SELECT 'B', 0 FROM dual union ALL
  8  SELECT 'A', 0 FROM dual
  9  /
 
TABLE created
SQL> SELECT *
  2    FROM test_upd
  3  /
 
ID       RANK
-- ----------
A           0
B           0
A           0
A           0
C           0
B           0
A           0
 
7 rows selected
SQL> merge INTO test_upd d
  2    USING (SELECT rowid, row_number() over(partition BY id ORDER BY rowid) nouveau_rank
  3            FROM test_upd
  4          ) s
  5      ON (d.rowid = s.rowid)
  6  when matched then UPDATE SET d.rank = s.nouveau_rank
  7  /
 
Done
SQL> SELECT *
  2    FROM test_upd
  3  /
 
ID       RANK
-- ----------
A           1
B           1
A           2
A           3
C           1
B           2
A           4
 
7 rows selected
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 16h11   #4
Invité de passage
 
Homme David
Consultant informatique
Inscription : septembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Santé

Informations forums :
Inscription : septembre 2011
Messages : 2
Points : 2
Points : 2
Excellent, c'est exactement cela.
Il me manquait l'astuce avec le ROWID.

Encore merci à tous.
Davidbe 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 00h21.


 
 
 
 
Partenaires

Hébergement Web