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 :

Start with et group by


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut Start with et group by
    Bonjour,
    tout d'abord joyeux noel et bon bout d'an

    J'ai un souci avec ma requête.
    J'ai ma table pgm:
    -group_uid
    -partner_code
    - parent_group_uid
    -crpgm_delete_flag

    Mon problème est le suivant:
    J'aimerais obtenir l'arborescence de mes groupes mais sans mes partners.
    Or comme il y a une ligne par partner, j'ai n lignes du même group uid.
    Je n'arrive pas à faire de group by

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select level,
    pgm.group_uid,
    --rpad('/',2*level,'-')||pg.description,
    sys_connect_by_path(pg.description,'/') "DESCRIPTION",
    pgm.parent_group_uid
    --pgm.partner_code
     
    from partner_groups_maintenance pgm join partners_group pg on pg.group_uid=pgm.group_uid
    start with pgm.parent_group_uid is null 
    and pgm.crpgm_delete_flag='N'
    connect by pgm.parent_group_uid=prior pgm.group_uid
    --group by pgm.group_uid
    merci d'avance

    claire

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    personne ne sait si je peux cumuler un start with et un group by?

    peut-être ais-je mal expliqué mon problème?

    merci d'avance

    claire

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Salut,

    Essaye de mettre des echantillons de tes tables, car j'avoue que j'ai pas bien compris ton "... mais sans mes partners."

    ---
    Farid.

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    dans ma table partner_group_maintenance:

    group_uid partner_code parent_group_uid
    1 20 null
    2 20 1
    3 20 2
    1 30 null
    2 30 1
    3 30 2


    j'ai donc 2 partners qui appartiennent au group 1. Ce groupe 1 est relié au groupe 2 donc, automatiquement dans la table, le partner est relié au groupe 2, et de même pour le groupe 3.

    Il y a donc 3 niveau: le plus élevé, le groupe 1
    ensuite le groupe 2 puis le groupe 3.
    Hors ces groupes apparaissent 2 fois puisqu'il y a 2 partner

    J'espère que c'est plus claire?

    merci
    claire

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    hum pas tout saisi mais dit moi si ca reponds a ta demande comme sous requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT
      pgm.group_uid
      ,pgm.parent_group_uid
    FROM PARTNER_GROUP_MAINTENANCE pgm
    START WITH pgm.parent_group_uid IS NULL 
    CONNECT BY pgm.parent_group_uid=prior pgm.group_uid
    J'ai utilisé ca pour creer la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE PARTNER_GROUP_MAINTENANCE (
      "GROUP_UID" NUMBER(10,0),
      "PARTNER_CODE" NUMBER(10,0),
      "PARENT_GROUP_UID" NUMBER(10,0));
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(1,20,null);
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(2,20,1);
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(3,20,2);
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(1,30,null);
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(2,30,1);
    INSERT INTO PARTNER_GROUP_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(3,30,2);
    Le resultat de la requete etant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    GROUP_UID              PARENT_GROUP_UID       
    ---------------------- ---------------------- 
    1                                             
    2                      1                      
    3                      2                      
     
    3 rows selected
    ---
    Farid

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    merci pour ta réponse mais ça pose un problème avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sys_connect_by_path(pg.description,'/') "DESCRIPTION"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ORA-30004: when using sys_connect_by_path function,
    cannot have separator as part of column value

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Salut,
    La requete suivante fonctionne:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    CREATE TABLE PARTNER_GROUPS_MAINTENANCE (
      "GROUP_UID" NUMBER(10,0),
      "PARTNER_CODE" NUMBER(10,0),
      "PARENT_GROUP_UID" NUMBER(10,0));
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(1,20,null);
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(2,20,1);
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(3,20,2);
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(1,30,null);
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(2,30,1);
    INSERT INTO PARTNER_GROUPS_MAINTENANCE(GROUP_UID,PARTNER_CODE,PARENT_GROUP_UID) VALUES(3,30,2);
     
    CREATE TABLE PARTNERS_GROUP (
      "GROUP_UID" NUMBER(10,0),
      "DESCRIPTION" VARCHAR2(80));
    INSERT INTO PARTNERS_GROUP(GROUP_UID,DESCRIPTION) VALUES(1,'GRP1');
    INSERT INTO PARTNERS_GROUP(GROUP_UID,DESCRIPTION) VALUES(2,'GRP2');
    INSERT INTO PARTNERS_GROUP(GROUP_UID,DESCRIPTION) VALUES(3,'GRP3');
     
    WITH 
      FLT_GRPUID AS (
        SELECT DISTINCT pgm.group_uid,pgm.parent_group_uid
        FROM PARTNER_GROUPS_MAINTENANCE pgm
        START WITH pgm.parent_group_uid IS NULL 
        CONNECT BY pgm.parent_group_uid=prior pgm.group_uid)
     
    SELECT DISTINCT LEVEL, pgm.group_uid, sys_connect_by_path(pg.description,'/') "DESCRIPTION", pgm.parent_group_uid
    FROM FLT_GRPUID pgm 
    JOIN partners_group pg ON pg.group_uid=pgm.group_uid
    CONNECT BY pgm.parent_group_uid=prior pgm.group_uid;
    PS: je n'ai pas rajouter le pgm.crpgm_delete_flag='N' mais il suffit de le rajouter dans le select qui construit FLT_GRPUID

    ---
    Farid

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/02/2007, 17h14
  2. [XPath][MSXML] starts-with renvoie méthode inconnue
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/02/2007, 10h37
  3. Starting With : Possible ?
    Par kedare dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 19/11/2006, 13h18
  4. performance clause like / starting with
    Par KRis dans le forum SQL
    Réponses: 2
    Dernier message: 20/01/2006, 14h42
  5. quel équivalent de start with...connect by prior en DB?
    Par Mittou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2005, 14h02

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