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 :

Regroupement au milieu d'un tri (order sibling by?)


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut Regroupement au milieu d'un tri (order sibling by?)
    Bonjour,

    J'ai une requête avec un tri assez compliqué, et au milieu de ce tri, j'aimerai regroupé certaine ligne, et je ne vois absolument pas comment faire.
    Je commente ma question avec un exemple

    ma ligne se compose des colonnes suivantes :
    objectid, objectid_mere, info1, info2, info3, ... infoN
    (avec des lignes ayant des objectid_mere = null et d'autre ayant des objectid_mere = objectid d'une autre ligne.

    Mon tri se fait par rapport à mes N infos.
    Et je voudrais que mon tri se fasse par rapport à mes N infos pour mes lignes ayant des objectid_mere à null.
    Et que mes lignes ayant un objectid_mere se situe en dessous de sa ligne mère (dont l'objectid = objectid_mere); et donc que pour ces lignes (filles), ne pas tenir compte du tri.

    Est ce que order sibling by répond à cette problématique ?

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Si tu veux deux tris différents entre les racines et les fils, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ORDER SIBLINGS BY 
        CASE WHEN objectid_mere IS NULL then 0 ELSE objectid END, 
        info1, info2, ..., infon

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut
    Le SIBLING a une utilité ? c'est lui qui permet de faire le CASE ?

    Mon problème n'est pas de séparer les "filles", mais de trier les lignes filles par rapport à la ligne mère, et que les lignes mères soient triées les unes par rapport aux autres.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par usbeck Voir le message
    Le SIBLING a une utilité ? c'est lui qui permet de faire le CASE ?

    Mon problème n'est pas de séparer les "filles", mais de trier les lignes filles par rapport à la ligne mère, et que les lignes mères soient triées les unes par rapport aux autres.
    Pour une requête hiérarchique (connect by) l’order by détruit l'hiérarchie. Siblings permet de préserver l’hiérarchie dans ce cas.

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    ... et le CASE sert juste à n'appliquer l'order BY sur les racines.

    Si tu fais la même sans case (et donc directement avec les info1, ...) tu appliques le tri sur toutes les noeuds d'un même niveau et de même père.

    Or tu disais ne vouloir l'appliquer que pour les éléments ayant id mère à NULL, non ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut
    Ok donc c'est le connect by que je ne sais pas utilisé

    Citation Envoyé par pacmann Voir le message
    ... et le CASE sert juste à n'appliquer l'order BY sur les racines.

    Si tu fais la même sans case (et donc directement avec les info1, ...) tu appliques le tri sur toutes les noeuds d'un même niveau et de même père.

    Or tu disais ne vouloir l'appliquer que pour les éléments ayant id mère à NULL, non ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut
    Bon alors, je suis obligé d'avouer je vous ai simplifié mon cas car je pensais que c'était pas important, or si je veux faire une requête hierarchique, j'ai un problème. Je suppose que le connect by , order sibling résout mon problème, mais je n'ai pas une vrai requête hierarchique.

    Donc ma question se transforme, est il possible de transformer ma requete en requete hierarchique.
    Voilà à quoi ressemble vraiment mes données :

    objectid, type = 'B' ou 'E', objectid_distant, info.....

    Si mon type = 'B', alors ca sera une ligne mère.
    Si mon type = 'E', alors c'est une ligne fille, dépendante de la ligne mère ou objectid_distant est le même (objectid_distant(B) = objectid_distant(E))

    C'est possible de mettre du connect by la dedans :/

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut
    Je crois que j'ai trouvé une solution (ma requête est en train de tourner)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select level, vv.objectid, vv.objectid_parent
    from (select decode(type, 'B', objectid_distant, null) as objectid, 
                     decode(type, 'E', objectid_distant, 1) as objectid_parent,
                     reste_info....
            from matable) vv
    start with vv.objectid_parent = 1
    connect by vv.objectid = vv.objectid_parent
    order sibling by ...
    ca vous semble être ca ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut
    Echec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-30928: Connect by filtering phase runs out of temp tablespace

Discussions similaires

  1. Tri (ORDER) erroné en UTF-8
    Par Dimitri01 dans le forum Outils
    Réponses: 3
    Dernier message: 14/11/2007, 12h18
  2. [Tri] order by Oracle vs sort Unix
    Par raj dans le forum SQL
    Réponses: 1
    Dernier message: 06/07/2007, 15h55
  3. double tri ORDER BY
    Par Pepito dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2005, 01h44
  4. [ORDER BY]tri sur le dernier caractère d'un champ
    Par Tan dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/05/2004, 14h39
  5. Réponses: 9
    Dernier message: 18/03/2004, 12h20

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