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 :

comment grouper des lignes continues


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Par défaut comment grouper des lignes continues
    Bonjour,

    j'aimerais pouvoir grouper des lignes en respectant leur ordre. je m'explique par un exemple :

    j'ai par exemple la table suivante :

    ordre valeur
    1 A
    2 A
    3 A
    4 B
    5 B
    6 A

    j'aimerais obtenir le résultat suivant :

    debut fin valeur
    1 3 A
    4 5 B
    6 6 A

    j'ai regardé un peut les fonctions analystiques d'oracle, mais je n'ai pas trouvé de solutions...

    quelqu'un aurais t'il une idée?

    merci

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create table t as (
    select 1 o,'A' v from dual union all
    select 2,'A' from dual union all
    select 3,'A' from dual union all
    select 4,'B' from dual union all
    select 5,'B' from dual union all
    select 6,'A' from dual );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select v,min(o), max(o)
    from (
    select o,row_number() over (partition by v order by o)r,v from t
    )
    group by v,o-r
    order by 2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    V     MIN(O)     MAX(O)
    - ---------- ----------
    A          1          3
    B          4          5
    A          6          6

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Par défaut
    génial, merci mille fois, impressionant, je cherchais depuis des plombes...

    j'ai étendu ton exemple à deux colonnes de valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE test_group AS (
    SELECT 1 No,'A' val1, 'A' val2 FROM dual union ALL
    SELECT 2,'A','A' FROM dual union ALL
    SELECT 3,'A','B' FROM dual union ALL
    SELECT 4,'B','B' FROM dual union ALL
    SELECT 5,'B','B' FROM dual union ALL
    SELECT 6,'A','B' FROM dual );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT val1, val2, min(No), max(No)
    FROM (
    	SELECT No, row_number() over (partition BY val1, val2 ORDER BY No) r, val1, val2 FROM test_group
    )
    GROUP BY val1,val2,No-r
    ORDER BY 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    val1   val2    min    max
    A	A	1	2
    A	B	3	3
    B	B	4	5
    A	B	6	6
    merci encore,

    P.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Par défaut question subsidiaire...
    merci encore mon problème est résolu...

    mais je me demandais (pour le fun) comment faire si la colonne numerique de référence était une chaine...
    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Nom valeur
    Albert   A
    Benoit   A
    Gérard   B
    Simon   A
    William  A
    retournant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DE      A         valeur
    Albert  Benoit  A
    Gérard Gérard  B
    Simon  William  A
    Patrice.

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table t as (
    select 'Albert' nom,'A' v from dual union all
    select 'Benoit','A' from dual union all
    select 'Gérard','B' from dual union all
    select 'Simon','A' from dual union all
    select 'William','A' from dual );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT v,min(nom), max(nom)
    FROM (  SELECT 
        nom,
        row_number() over (partition BY v ORDER BY nom)r,
        row_number() over (ORDER BY nom)o,
    	v 
      FROM t)
    GROUP BY v,o-r
    ORDER BY 2;
    V MIN(NOM MAX(NOM
    - ------- -------
    A Albert  Benoit
    B Gerard  Gerard
    A Simon   William

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bien vu le group by !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/08/2008, 15h25
  2. Réponses: 2
    Dernier message: 07/08/2006, 16h43
  3. [Requete] Comment ignorer des lignes avec un LOAD DATA
    Par frangin2003 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2005, 12h14
  4. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40
  5. Réponses: 4
    Dernier message: 02/09/2004, 14h50

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