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 :

Aide pour création requête


Sujet :

Oracle

  1. #1
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut Aide pour création requête hiérarchique
    Bonjour,

    voilà, comme ça fait un petit bout de temps que j'ai pas fait de SQL "avancé" (et qu'on est vendredi aprem ), je sollicite votre aide pour m'aider à créer ma requête ....

    j'ai cette table :
    Nom : table.jpg
Affichages : 93
Taille : 40,8 Ko

    j'ai donc des enregistrements qui sont "enfants" de certains autres.

    En gros la structure est la suivante :

    CA
    - WBS
    -WBS (autant de niveau qu'on veut)
    - WP


    je fais un select qui récupère tout un niveau à la fois.
    Par contre j'ai besoin d'avoir à chaque fois le "task_number" du CA parent.

    En gros pour le premier niveau WBS cette valeur est dans la colonne task_parent_number. Par contre au niveau d'en dessous, je perds cette information et j'en ai besoin.


    Voici ma requete pour l'instant mais je ne sais pas comment la modifier pour obtenir ce que je veux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT BATCH_TRANSFER, BATCH_STATE, BATCH_NUMBER,...
    FROM transfer_wbs2 
    WHERE TASK_TYPE='WBS' 
    AND TASK_PARENT_NUMBER = 'WBS2-1'     -- par exemple
    désolé de vous embeter avec ça .
    merci d'avance

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    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
     
    SQL> select t.*, connect_by_root task_number "PARENTTASKNR" 
    from t 
    connect by task_parent_number=prior task_number and prog_number=prior prog_number 
    start with task_parent_number is null;
    BATCH_INDEX PROG TAS TASK_NUM TASK_NAME            TASK_PAR PARENTTA
    ----------- ---- --- -------- -------------------- -------- --------
              1 PRG1 CA  PRG1-CA1 ControlAccount 1              PRG1-CA1
              3 PRG1 WBS WBS1-1   WBS 1                PRG1-CA1 PRG1-CA1
              6 PRG1 WP  1001     WP 1001              WBS1-1   PRG1-CA1
              9 PRG1 WBS WBS2-11  WBS 4                WBS1-1   PRG1-CA1
              4 PRG1 WBS WBS1-2   WBS 2                PRG1-CA1 PRG1-CA1
              7 PRG1 WP  1002     WP 1002              WBS1-2   PRG1-CA1
              2 PRG1 CA  PRG1-CA2 ControlAccount 2              PRG1-CA2
              5 PRG1 WBS WBS2-1   WBS 3                PRG1-CA2 PRG1-CA2
              8 PRG1 WP  2001     WP 2001              WBS2-1   PRG1-CA2

  3. #3
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    merci beaucoup, je ne connaissais pas.

    je vais essayer de l'appliquer à mes requetes. Je pense que c'est parfait.

    merci encore.

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    bon en fait je n'ai que oracle 9i docn pas de connect_by_root apparemment.

    je vais essayer d'adapter tout ça mais en tous cas ça va me permettre d'apprendre comment utiliser ceci.

    merci bien encore une fois.

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    merci de préciser la version

    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
    SQL> select t.*,
      substr(sys_connect_by_path(task_number,'@'),2,
        instr(sys_connect_by_path(task_number,'@')||'@','@',2)-2) "PARENTTASKNR" 
    from t 
    connect by task_parent_number=prior task_number and prog_number=prior prog_number 
    start with task_parent_number is null;
    BATCH_INDEX PROG TAS TASK_NUM TASK_NAME            TASK_PAR PARENTTASKNR
    ----------- ---- --- -------- -------------------- -------- ------------------------------
              1 PRG1 CA  PRG1-CA1 ControlAccount 1              PRG1-CA1
              3 PRG1 WBS WBS1-1   WBS 1                PRG1-CA1 PRG1-CA1
              6 PRG1 WP  1001     WP 1001              WBS1-1   PRG1-CA1
              9 PRG1 WBS WBS2-11  WBS 4                WBS1-1   PRG1-CA1
              4 PRG1 WBS WBS1-2   WBS 2                PRG1-CA1 PRG1-CA1
              7 PRG1 WP  1002     WP 1002              WBS1-2   PRG1-CA1
              2 PRG1 CA  PRG1-CA2 ControlAccount 2              PRG1-CA2
              5 PRG1 WBS WBS2-1   WBS 3                PRG1-CA2 PRG1-CA2
              8 PRG1 WP  2001     WP 2001              WBS2-1   PRG1-CA2

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je suis en 9.2, désolé, j'aurais dû l'indiquer depuis le début ...


    bon, je viens d'essayer la requete proposée est Toad me dis que la requete ne se termine pas correctement. [EDIT] Non non c'est moi qui trip ... ça à l'air pas mal ... je vais essayer après manger


    moi j'étais du coup parti sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT BATCH_TRANSFER, ... ,(SELECT task_number FROM transfer_wbs2 where task_parent_number is null
    connect by task_parent_number=prior task_number 
    and prog_number=prior prog_number 
    start with task_parent_number = tw2.task_number 
    ) parent_ca
    FROM transfer_wbs2 tw2
    WHERE TASK_TYPE='WBS' 
    AND BATCH_STATE = 'W' 
    AND TASK_PARENT_NUMBER = 'WBS1-1'
    mais bon, la colone parent_CA est vide.

    bref, je continue à bidouiller pour comprendre comment ça marche ...

    en fait j'ai essayé de modifier votre première proposition pour ne retourner qu'un seul enregistrement. mais bon, pour l'instant, c'est pas génial ...

  7. #7
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    bon app'

  8. #8
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Bon, j'ai abandonné mon essai pour votre solution. Ca fonctionne tres bien, et en plus je pense que c'est plus "optimisé".

    merci beaucoup, et à charge de recanche j'espere

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

Discussions similaires

  1. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  2. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  3. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  4. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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