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

SQL Oracle Discussion :

Récupérer les différences entre lignes dans une table


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut Récupérer les différences entre lignes dans une table
    Bonjour à tous,

    J'ai une table dans laquelle j'ai les données dans ce format là:

    | IDENTIFIANT | CHAMP_1 | CHAMP_2 | .... | VERSION |
    | FR | FRANCE | FRA. | .... | 1 |
    | FR | FRANCE | FRA | .... | 2 |
    | FR | TOTO | FRA | .... | 3 |
    | US | USA | USA | .... | 1 |
    ...


    J'aimerais pouvoir (au final dans une vue), récupérer toutes les lignes qui sont présentes dans ma table, mais en gardant pour chacune, que les différences avec la ligne précédente (basé sur le champs VERSION). Le tout, en se basant sur la colonne IDENTIFIANT.

    Dans l'exemple ci-dessus, j'aurais donc quelque chose comme ça:

    | IDENTIFIANT | CHAMP_1 | CHAMP_2 | .... | VERSION |
    | FR | FRANCE | FRA. | .... | 1 | (Valeurs initiales)
    | FR | | FRA | .... | 2 | (Le CHAMP_1 n'a pas été modifié, je ne l'affiche pas)
    | FR | TOTO | | .... | 3 | (Le CHAMP_2 n'a pas été modifié, je ne l'affiche pas)
    | US | USA | USA | .... | 1 |
    ...



    Est-ce possible de faire ça en SQL? Si oui, comment dois-je m'y prendre?

    Merci d'avance !

    Philippe

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    With MaTable as
    (
    select 'FR' as id, 'FRANCE' as c1, 'FRA.' as c2, 1 as ver from dual union all
    select 'FR'      , 'FRANCE'      , 'FRA'       , 2        from dual union all
    select 'FR'      , 'TOTO'        , 'FRA'       , 3        from dual union all
    select 'US'      , 'USA'         , 'USA'       , 1        from dual
    )
      select id
           , case when c1 <> lag(c1, 1, 'A') over(partition by id order by ver asc) then c1 end as c1
           , case when c2 <> lag(c2, 1, 'A') over(partition by id order by ver asc) then c2 end as c2
           , ver
        from MaTable
    order by id asc, ver asc;
     
    ID C1     C2   VER
    -- ------ ---- ---
    FR FRANCE FRA.   1
    FR        FRA    2
    FR TOTO          3
    US USA    USA    1

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Par défaut
    Bonjour,

    merci pour cette réponse, qui répond parfaitement à mon besoin !

    Philippe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/05/2010, 20h30
  2. Réponses: 2
    Dernier message: 26/01/2010, 14h50
  3. Réponses: 10
    Dernier message: 27/05/2008, 12h09
  4. Réponses: 5
    Dernier message: 11/07/2007, 16h03
  5. Réponses: 2
    Dernier message: 18/02/2007, 21h30

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