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

SAP Discussion :

Besoin d'explication sur une requête.


Sujet :

SAP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 220
    Points : 70
    Points
    70
    Par défaut Besoin d'explication sur une requête.
    Bonjour, est ce quelqu'un pourrait m'expliquer cette requête svp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    refresh i_data.
       select t2~PERNR NACHN VORNA ORGEH CORPS GRADE PNALT
               FROM ( ( ( PA0002 as t2
                 inner join PA0001 as t1 ON t2~PERNR = t1~PERNR )
                 inner join PA0431 as t431 ON t2~PERNR = t431~PERNR )
    	      inner join PA0032 as t32 ON t2~PERNR = t32~PERNR ) 		
                 into corresponding fields of table i_data
               where t2~pernr in so_pernr and t1~ENDDA = '99991231'
               and t2~ENDDA = '99991231' and t32~ENDDA = '99991231'
               and t431~ENDDA = '99991231'
               and t431~SUBTY = '0'.
    Merci

  2. #2
    Membre éprouvé Avatar de Celdrøn
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Juillet 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant SAP

    Informations forums :
    Inscription : Juillet 2007
    Messages : 614
    Points : 1 008
    Points
    1 008
    Par défaut
    C'est une jointure sur 4 tables o_O

    Alors deja, on donne des alias aux tables, donc :
    - t1 = PA0001
    - t2 = PA0002
    - t32 = PA0032
    - t431 = PA0431

    Ensuite, on verifie successivement si :
    - Une entrée existe dans PA0001 pour PA0002-PERNR = PA0001-PERNR
    - Une entrée existe dans PA0431 pour PA0002-PERNR = PA0431-PERNR
    - Une entrée existe dans PA0032 pour PA0002-PERNR = PA0032-PERNR
    En gros, on vérifie que pour un même PA0002-PERNR, que l'on a, au moins, une entrée dans PA0001, PA0431 et PA0032.
    Après t'as encore une clause WHERE, donc on ne veut que les entrées pour lesquels
    t2~pernr in so_pernr (PERNR présent dans le SELECT-OPTIONS)
    and t1~ENDDA = '99991231' (ET Date de fin = 31/12/9999)
    and t2~ENDDA = '99991231' (idem)
    and t32~ENDDA = '99991231' (idem)
    and t431~ENDDA = '99991231' (idem)
    and t431~SUBTY = '0' (ET Sous-Type = 0)

    Si c'est le cas, on récupère de la table PA0002 les champs :
    - PERNR (Matricule)
    - NACHN (Nom)
    - VORNA (Prénom)
    de la table PA0001 :
    - ORGEH (Unité structurelle)
    de la table PA0431
    - CORPS (Corps, cadre d'emploi)
    - GRADE (Grade)
    de la table PA0032
    - PNALT (Ancien matricule)

    Pour toutes les entrées qui correspondent à ces critères, on les insère dans la table i_data.

    Bref, c'est tout un bordel donc j'espère ne pas m'être gourré quelque part.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Merci de ta réponse Celdrøn,

    mais dis moi quel est l'intérêt d'utiliser des alias pour les différents tables ?

    Et je sais aussi que lorsqu'on veut récupérer un champ d'un table on fait:

    PA0001-pernr

    alors pour quoi t2~ENDDA au lieu de t2-ENDDA


    au début du select il fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select t2~PERNR NACHN VORNA ORGEH CORPS GRADE PNALT
    pourquoi mettre le t2~ devant le PERNR et pas pour les autres champs

    Merci.

  4. #4
    Membre éprouvé Avatar de Celdrøn
    Homme Profil pro
    Consultant SAP
    Inscrit en
    Juillet 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant SAP

    Informations forums :
    Inscription : Juillet 2007
    Messages : 614
    Points : 1 008
    Points
    1 008
    Par défaut
    Je savais que j'aurais du mettre pourquoi on met un t2~PERNR ^_^

    Tout simplement parce que PERNR est une zone commune a plusieurs tables, donc pour eviter tout conflit, on précise de quel table on veux récupérer la valeur de PERNR. Toutes les autres zones que l'on récupère dans la requete sont chacune présente que dans une seul table.

    Pour les alias, faut utiliser le caractère '~' au lieu de '-', sinon ça renvoi une erreur lors de l'activation. (compilation)

    Sinon l'intêret des alias est que si une database apparait plusieurs fois après FROM dans une jointure, l'utilisation des alias est obligatoire pour éviter toute ambiguïté.

    Voila.

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

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  2. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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