Bonjour,
j'ai une table de ce type :
idParcelle
idProprietaire
Il peut y avoir plusieurs proprietaires pour chaque parcelle.
Nous voulons ajouter un champ Numero (integer). Pour la reprise d'historique, il faudrait initialiser ce champ en incrementant celui cen fonction du nombre de proprietaire pour chaque parcelle.
Exemple
idParcelle ---------- idProprietaire -------- Numéro
1 ----------------------1------------------ 1
1 ----------------------2------------------ 2
1 ----------------------3------------------ 3
2 ----------------------1------------------ 1
3 ----------------------1------------------ 1
3 ----------------------4------------------ 2
maintenant, mon problème se pose pour faire l'update du champ numero pour toute la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT cur_par,cur_tie,dense_rank() over(partition BY cur_par ORDER BY cur_tie) DENSE_RNK FROM ( SELECT prop2.cur_par,prop2.cur_tie FROM grpe_parcelle_proprietaire prop2 GROUP BY prop2.cur_par,prop2.cur_tie )
il faudrait que je fasse un truc genre
mais je n'ai biensur pas accès à prop1 dans ma requete imbriquée...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 UPDATE grpe_parcelle_proprietaire prop1 SET NUMERO = ( SELECT dense_rank() over(partition BY cur_par ORDER BY cur_tie) DENSE_RNK FROM ( SELECT prop2.cur_par,prop2.cur_tie FROM grpe_parcelle_proprietaire prop2 GROUP BY prop2.cur_par,prop2.cur_tie ) WHERE prop2.CUR_PAR = prop1.cur_par AND prop2.cur_tie = prop1.cur_tie )
Pour l'instant, j'ai trouvé une parade en créant une table temporaire avec les données de mon ancienne table puis j'ai supprimé mon ancienne table et renommer la nouvelle.
Mais c'est tres long à se lancer ( environ 3 minutes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE GRPE_PARCELLE_PROPRIETAIRE_T AS SELECT CUR_TIE,CUR_PAR,TPO_ID,OBSERVATIONS_PROPRIETAIRE,CUR_PMPA,dense_rank() over(partition BY cur_par ORDER BY cur_tie) NUMERO FROM ( SELECT * FROM GRPE_PARCELLE_PROPRIETAIRE prop ) ; DROP TABLE GRPE_PARCELLE_PROPRIETAIRE; ALTER TABLE GRPE_PARCELLE_PROPRIETAIRE_T RENAME TO GRPE_PARCELLE_PROPRIETAIRE;
Je préfererais utiliser un script d'update...
Merci
Partager