IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

rownum dans un group by


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 84
    Points
    84
    Par défaut rownum dans un group by
    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 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

    J'ai voulu utiliser rownum mais je n'arrive absolument pas à faire la requete pour initialiser ce champ.

    merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    regarde ROW_NUMBER dans les fonctions analytiques

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 84
    Points
    84
    Par défaut
    bonjour,

    merci, j'ai réussi à obtenir pour chaque parcelle et proprietaire le bon numéro avec la requete suivante

    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
    	   )
    maintenant, mon problème se pose pour faire l'update du champ numero pour toute la table.

    il faudrait que je fasse un truc genre
    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    
    )
    mais je n'ai biensur pas accès à prop1 dans ma requete imbriquée...

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 84
    Points
    84
    Par défaut
    je n'ai toujours pas trouver la solution donc j'ai fait autrement. J'ai crée une table temporaire avec les données de mon ancienne table puis j'ai supprimé mon ancienne table et renommer la nouvelle.

    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 ne trouve pas ça super donc si quelqu'un à une autre idée je suis preneur

Discussions similaires

  1. Mon contrôle ne se "colle" pas dans mon groupe d'o
    Par saucisson dans le forum Access
    Réponses: 4
    Dernier message: 16/09/2005, 18h08
  2. Mettre un champ Blob dans un Group By
    Par WebPac dans le forum SQL
    Réponses: 1
    Dernier message: 17/08/2005, 18h03
  3. Enregistrer un nouveau serveur dans un groupe de serveur ?
    Par pop bob dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/07/2005, 16h18
  4. Regrouper des champs dans un GROUP BY
    Par kaiserazo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 11/07/2005, 08h43
  5. GROUP_ID dans requete GROUP BY
    Par quemener dans le forum Oracle
    Réponses: 11
    Dernier message: 25/10/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo