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

Langage SQL Discussion :

Problème de case dans une requète SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème de case dans une requète SQL
    Bonjour,

    Le code ci-dessous est fonctionnel à un petit problème près. Pour deux valeurs de COD_CMP ( 963 et 955 ) de la table COMPOSANTE ( C ), les valeurs ne sont pas celles à retournés. Il faut en effet récupérer la bonne valeur dans INTER_GROUP_COMPOSANTE ( G ) en passant par la table GROUPE_DIPLOME (D ).
    L'idée générale serait :

    IF D.COD_CMP = 963 ( ou 955 )
    THEN COD_CMP := G.COD_CMP WHERE D.CODE_GROUPE = G.CODE_GROUPE

    J'ai donc pensé à utilisé un case comme cela dans le WHERE de ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         case c.cod_cmp
               when c.cod_cmp = '963' then cod_cmp := code_composante where D.cod_gdi= G.code_groupe 
               when c.cod_cmp = '955' then cod_cmp := code_composante where D.cod_gdi= G.code_groupe 
         end
    Mais cela ne fonctionne pas.

    Voici le code SQL :

    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
    SELECT  C.COD_CMP, LIB_CMP,
                COD_ETU, LIB_NOM_PAT_IND, LIB_PR1_IND,
                DECODE(A.COD_RGI,'1','FI','2','FC','3','FI','4','ST','5','AL','6','AP','7','FC',' ')
     
    FROM    INDIVIDU I, INS_ADM_ETP E, 
               INS_ADM_ANU A, ETAPE T, 
               COMPOSANTE C, GROUPE_DIPLOME D, INTER_GROUP_COMPOSANTE G
     
    WHERE      E.COD_ANU = '2014'
                   and A.COD_ANU = '2014'
                   and T.COD_ETP = E.COD_ETP and T.cod_cyc='3'
                   and E.COD_CMP not in ('802','970','980','985')
                   and E.TEM_IAE_PRM = 'O'
                   and E.ETA_IAE = 'E'
                   and E.ETA_PMT_IAE = 'P'
                   and I.COD_IND = E.COD_IND
                   and  C.COD_CMP =  decode(E.COD_CMP,'931','904','961','901','962','903','959','902',E.cod_cmp)
                   and TEM_EN_SVE_CMP = 'O'
                   and (E.cod_etp not like 'DO%')
                   and E.cod_etp<>'DAEU'
                   and E.cod_ind=A.cod_ind
     
    order by  cod_cmp, LIB_NOM_PAT_IND, LIB_PR1_IND

    Ceci est dans la cadre de la requête d'un report sous Oracle Reports Builder.
    Merci d'avance pour votre aide!

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Ce serait sans doute plus simple de faire une requete pour le cas général UNION (all) une requete pour les valeurs D.COD_CMP = 955 ou 963

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En effet! Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Quelque chose comme ça ?
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    SELECT  COALESCE(code_composante, c.cod_cmp)
        ,   lib_cmp
        ,   cod_etu
        ,   lib_nom_pat_ind
        ,   lib_pr1_ind
        ,   DECODE(a.cod_rgi, '1', 'FI', '2', 'FC', '3', 'FI', '4', 'ST', '5', 'AL', '6', 'AP', '7', 'FC', ' ')
    FROM    individu        i
        INNER JOIN
            ins_adm_etp     e
            ON  i.cod_ind   = e.cod_ind
        INNER JOIN
            etape           t
            ON  t.cod_etp   = e.cod_etp
        INNER JOIN
            ins_adm_anu     a
            ON  e.cod_ind   = a.cod_ind
        INNER JOIN
            composante      c
            LEFT JOIN
                    inter_group_composante  g
                INNER JOIN
                    groupe_diplome  d
                    ON  d.cod_gdi   = c.code_groupe
                ON  c.cod_cmp IN ('955', '963')  
            ON  COALESCE(code_composante, c.cod_cmp) = DECODE(e.cod_cmp, '931', '904', '961', '901', '962', '903', '959', '902', e.cod_cmp)
    WHERE   e.cod_anu       = '2014'
        AND a.cod_anu       = '2014'
        AND t.cod_cyc       = '3'
        AND e.cod_cmp       NOT IN ('802','970','980','985')
        AND e.tem_iae_prm   = 'O'
        AND e.eta_iae       = 'E'
        AND e.eta_pmt_iae   = 'P'
        AND tem_en_sve_cmp  = 'O'
        AND e.cod_etp       NOT LIKE 'DO%'
        AND e.cod_etp       <> 'DAEU'
    ORDER BY cod_cmp
        ,   lib_nom_pat_ind
        ,   lib_pr1_ind
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Problème de variable dans une requête SQL
    Par Namzicos dans le forum SQL
    Réponses: 2
    Dernier message: 27/01/2010, 14h38
  2. Problème de variable dans une Requête SQl
    Par steph77 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/08/2009, 15h16
  3. Problème d'espaces dans une requête SQL
    Par Wonesek dans le forum SQL
    Réponses: 9
    Dernier message: 22/04/2008, 16h46
  4. Problème de cumul dans une requête SQL
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 13/09/2007, 05h56
  5. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46

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