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 :

Quelles fonctions utiliser pour cette vue ?


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Mars 2006
    Messages : 148
    Points : 80
    Points
    80
    Par défaut Quelles fonctions utiliser pour cette vue ?
    Bonjour j’ai un problème qui relève typiquement de SQL.

    J’ai une table nommé EMPLOYE avec les champs suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     COD_EMPL               VARCHAR2(8)            
     NOM_EMPL               VARCHAR2(40)           
     PRE_EMPL               VARCHAR2(40)     
     SEX_EMPL               VARCHAR2(1)            
     POS_EMPL               VARCHAR2(2),
     COD_SIT_ADMI_EMPL      VARCHAR2(40),

    Pour obtenir la liste des employés actifs je tape la requête ci après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from employe a where (a.POS_EMPL='AC' or a.POS_EMPL='DT' or a.POS_EMPL='SU') and cod_sit_admi in (1,3)
    J’aimerais obtenir une vue qui me retourne le statut des employé. La structure de ma vue pourra être alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Vue_sataut_employe
     
      COD_EMPL               VARCHAR2(8)            
      NOM_EMPL               VARCHAR2(40)           
      PRE_EMPL               VARCHAR2(40)     
      SEX_EMPL               VARCHAR2(1)
      POS_EMPL               VARCHAR2(2),
      COD_SIT_ADMI_EMPL      VARCHAR2(40),
     
      Satut_emp			 NUMBER
    Le champs statut pourra alors avoir la valeur 1 si ce test est positif (a.POS_EMPL='AC' or a.POS_EMPL='DT' or a.POS_EMPL='SU') and cod_sit_admi in (1,3), et zéro dans le cas contraire.

    J’aimerais savoir quelle fonction je pourrais utiliser pour construire cette vue et comme m’y prendre ? J’espère que je réussis à me faire comprendre. Je suis en train de chercher si la fonction decode que je decouvre aujourd'hui pourrait m'aider.

    Merci à tous.

  2. #2
    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
    Essaye Avec Decode ou Case.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Mars 2006
    Messages : 148
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Essaye Avec Decode ou Case.
    Merci pour ta reponse j'ai decouvert la fonction decode en parcourant le forum j'essaie de comprendre comment m'en servir.

  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
    C'est mieux avec la doc

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    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
    Create Or Replace View Vue_satut_employe As
    Select
      COD_EMPL   ,
      NOM_EMPL   ,
      PRE_EMPL   ,
      SEX_EMPL   ,
      POS_EMPL   ,
      COD_SIT_ADMI_EMPL ,
      to_number(
               Decode(
                      Decode(POS_EMPL,'AC',1,'DT',1,'SU',1,0),
                      1,Decode(COD_SIT_ADMI_EMPL,1,1,3,1,0),0
                     )
               ) As Statut_Emp
    From EMPLOYE;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Decode(POS_EMPL,'AC',1,'DT',1,'SU',1,0)
    A ==> Ce decode renvoi 1 si POS_EMPL est égale à "AC" ou "DT" ou "SU" (Sinon 0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Decode(COD_SIT_ADMI_EMPL,1,1,3,1,0)
    B ==> Ce decode renvoi 1 Si COD_SIT_ADMI_EMPL est egale à 1 ou 3 (Sinon 0)


    Au final : on fait un decode du resultat de A Si = 1 Alors on applique le resultat de B Sinon 0


    CQFD
    Signé : Capitaine Jean-Luc Picard

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Mars 2006
    Messages : 148
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par argoet Voir le message
    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
    Create Or Replace View Vue_satut_employe As
    Select
      COD_EMPL   ,
      NOM_EMPL   ,
      PRE_EMPL   ,
      SEX_EMPL   ,
      POS_EMPL   ,
      COD_SIT_ADMI_EMPL ,
      to_number(
               Decode(
                      Decode(POS_EMPL,'AC',1,'DT',1,'SU',1,0),
                      1,Decode(COD_SIT_ADMI_EMPL,1,1,3,1,0),0
                     )
               ) As Statut_Emp
    From EMPLOYE;
    Merci pour ta réponse et ta proposition. Elle m'a permis de véritablement comprendre le fonction de la fonction Decode avec exemple et commentaire à l'appui.(même si je ne me retrouve pas encore véritablement vu le nombre d'imbrication de Decode).

    Ce pendant ta requête renvoie uniquement les employés actifs (avec dans le champ statut_emp la valeur 1). Elle ne retourne pas les employés qui ne sont pas actifs.

    Comment faire pour egalement obtenir les employé qui ne ne sont pas actif avec la valeur 0 dans le staut_emp.(je me demande si je pourrais me servir de l'operateur UNION)

    Merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Mars 2006
    Messages : 148
    Points : 80
    Points
    80
    Par défaut
    En effet apres excecution de cette requete tous les enregistrements de la table employe ont 1 comme valeur du champs statut_Emp

  8. #8
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par Fngonka Voir le message
    En effet apres excecution de cette requete tous les enregistrements de la table employe ont 1 comme valeur du champs statut_Emp
    Ben non !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select COD_EMPL  , POS_EMPL     , COD_SIT_ADMI_EMPL   , STATUT_EMP from vue_satut_employe;
     
    COD_EMPL PO COD_SIT_ADMI_EMPL                        STATUT_EMP
    -------- -- ---------------------------------------- ----------
    8        DT 0                                                 0
    3        DT 0                                                 0
    2        AC 3                                                 1
    1        DT 1                                                 1
    7        DT 4                                                 0
    6        SU 0                                                 0
    5        SU 3                                                 1
    4        SU 1                                                 1
    Signé : Capitaine Jean-Luc Picard

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Decode est vraiment très "vieille école", et ici l'utilisation d'un case est préférable, la relecture et compréhension est limpide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE VIEW Vue_statut_employe AS
    SELECT
      COD_EMPL   ,
      NOM_EMPL   ,
      PRE_EMPL   ,
      SEX_EMPL   ,
      POS_EMPL   ,
      COD_SIT_ADMI_EMPL ,
      CASE WHEN POS_EMPL IN ('AC', 'DT', 'SU') AND COD_SIT_ADMI_EMPL IN (1, 3)
           THEN 1
           ELSE 0
      END AS Statut_Emp
    FROM EMPLOYE;

Discussions similaires

  1. [Free Pascal] Quelles fonctions utiliser pour gérer le son
    Par labper dans le forum Free Pascal
    Réponses: 3
    Dernier message: 22/03/2011, 19h01
  2. Réponses: 31
    Dernier message: 01/10/2009, 14h21
  3. Réponses: 3
    Dernier message: 11/11/2005, 15h52
  4. Quelle licence choisir pour cette application ?
    Par krusaf dans le forum Licences
    Réponses: 6
    Dernier message: 08/07/2004, 20h20

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