PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 07/11/2022 20:17:15

Charle
Membre

Condition cas when sur plusieur champs qui ne marche pas.

Bonjour,

Je voudrais mettre une condition qui met une valeur dans un champs.
Je m'explique
Ma requette sort plusieur colonne:

"créditpotspe_inscmod"=0
creditpot_inscour =0
creditpot_inscour= 24
"créditpot_inscmod" =0
"CréditsModule"  =0

Je voudrais valorisé dans une colonne finale (ici creditpot_final) avec une condition Case When la valeur de l'un des champs précédent selon qu'ils soient nulle ou pas.

 Test du bbcode FluxBB


ici il devrait  afficher  24 dans creditpot_final.


Quelqu'un pourrais m'aider

Voici la condition que j'ai faites:

                WHEN validite."PRE_POST"::text = 'MIM_MANAGEMENT_COURSES'::text then

                    
                case
                when  validite."créditpotspe_inscmod" is not null  THEN validite."créditpotspe_inscmod"
            WHEN  validite."créditpotspe_inscmod" is null then validite.creditpot_inscour
            when  validite.creditpotspe_inscour is null then validite.creditpot_inscour
            when  validite.creditpot_inscour is null then validite."créditpot_inscmod"
            when validite."créditpot_inscmod" is null then validite."CréditsModule"
                   
                    end
        END AS creditpot_final



Mais cela ne marche pas.  dans creditpot_final j'ai 0

Voici mon code:


WITH cours AS (
         SELECT inscription_cours.apprenant_id,
            lip.ligne_parente_id,
            sum(inscription_cours.nombre_credits_potentiels) AS creditpot_inscour,
            --COALESCE(sum("Crédits potentiels.Inscription au cours"), 0::numeric) AS creditpot_inscour,
            COALESCE(sum(inscription_cours.credits_potentiels_specifiques), 0::numeric) AS creditpotspe_inscour,
            --COALESCE(sum("Crédits potentiels spécifiques.Inscription au cours"), 0::numeric) AS creditpotspe_inscour,
            sum(
                CASE
                    WHEN inscription_cours.est_validee_jury AND inscription_cours.est_verrouillee THEN inscription_cours.nombre_credits_obtenus_jury
                    ELSE 0::numeric
                END) AS credits_obtenus
           FROM t_inscriptions_cours inscription_cours
             JOIN t_statuts_inscription statut_inscription ON statut_inscription.objet_id = inscription_cours.statut_inscription_id
             JOIN t_cours cours_1 ON cours_1.objet_id = inscription_cours.cours_id
             JOIN t_arborescences_scolarite ligne_elementaire_programme ON ligne_elementaire_programme.cours_id = cours_1.objet_id
             JOIN t_arborescences_scolarite lip ON lip.objet_id = ligne_elementaire_programme.ligne_parente_id AND lip.arborescence_programme_id = 2401812
             LEFT JOIN t_types_apprenant type_apprenant ON type_apprenant.objet_id = inscription_cours.type_apprenant_id
          WHERE (statut_inscription.code::text <> ALL (ARRAY['INVISIBLE'::character varying::text, 'INSCRIT_AU_TITRE_DE'::character varying::text])) AND (type_apprenant.code IS NULL OR type_apprenant.code::text <> 'AUDITEUR'::text)
          GROUP BY inscription_cours.apprenant_id, lip.ligne_parente_id
        ), app AS (
         SELECT ae_app.attribut_valfloat,
            inscription_app.apprenant_id
           FROM t_inscriptions_programme inscription_app
             JOIN t_groupes groupe_app ON groupe_app.objet_id = inscription_app.groupe_id AND groupe_app.code::text ~~ '____MIM_APPRENTI__'::text AND groupe_app.type_groupe_id = 12618784
             JOIN t_donnees_float ae_app ON ae_app.objet_id = groupe_app.objet_id AND ae_app.attribut_id = 6580993
        ), modules_hors_mgt AS (
         SELECT inscription_module.apprenant_id,
            sum(
                CASE
                    WHEN app.attribut_valfloat IS NOT NULL THEN inscription_module.nombre_credits_potentiels
                    WHEN module.code::text = 'MIM_OUTGOING'::text AND inscription_module.nombre_credits_obtenus_jury > 0::numeric THEN inscription_module.nombre_credits_obtenus_jury
                    WHEN module.code::text = ANY ('{MIM_CFX,MIM_ADV,MIM_OUTGOING,MIM_OPTION}'::text[]) THEN inscription_module.nombre_credits_potentiels
                    ELSE 0::numeric
                END) AS credits_potentiels
           FROM t_inscriptions_module inscription_module
             JOIN t_individus apprenant_1 ON apprenant_1.objet_id = inscription_module.apprenant_id
             JOIN t_modules module ON module.objet_id = inscription_module.module_id
             LEFT JOIN app ON app.apprenant_id = apprenant_1.objet_id
          WHERE module.code::text = ANY ('{MIM_CFX,MIM_ADV,MIM_OUTGOING,MIM_OPTION,MIM_SMN_APP_METIER,MIM_SMN_APP_DYNAMIQUE_PERSO,MIM_SMN_APP_DIAGNOSTIC,MIM_SMN_APP_CLOTURE}'::text[])
          GROUP BY inscription_module.apprenant_id
        ), module_mim_management AS (
         SELECT inscription_module.objet_id AS id_interne_aurion,
            module.code AS "Code.Module",
            apprenant.ind_particule AS "NUMELV.Apprenant",
            inscription_module.objet_id AS "id.Inscription au module",
            inscription_module.nombre_credits_potentiels AS "créditpot_inscmod",
            inscription_module.credits_potentiels_specifiques AS "créditpotspe_inscmod",
            apprenant.objet_id AS "id.Apprenant",
            apprenant.ind_nom AS "Nom d'usage.Apprenant",
            --COALESCE(sum("Crédits potentiels spécifiques.Inscription au cours"), 0::numeric) AS creditpotspe_inscour,
            --COALESCE(sum("Crédits potentiels.Inscription au cours"), 0::numeric) AS creditpot_inscour,
            module.nombre_credits AS "CréditsModule"
           FROM ( SELECT o.objet_id,
                    o.apprenant_id,
                    o.module_id,
                    o.nombre_credits_potentiels,
                    o.taux_credits_obtenus,
                    o.est_validee,
                    o.est_verrouillee,
                    o.nombre_credits_obtenus,
                    o.classement,
                    o.moyenne,
                    o.note_alpha,
                    o.date_inscription,
                    o.nombre_points,
                    o.avec_note_eliminatoire,
                    o.note_ects,
                    o.moyenne_sans_rattrapage,
                    o.avec_rattrapage,
                    o.taux_remise,
                    o.statut_inscription_id,
                    o.validation_scola_id,
                    o.type_apprenant_id,
                    o.type_convention_id,
                    o.date_entree,
                    o.date_sortie,
                    o.absences_excusees,
                    o.heures_absences_excusees,
                    o.absences_non_excusees,
                    o.heures_absences_non_excusees,
                    o.moyenne_avant_absences,
                    o.non_valide_par_absence,
                    o.est_validee_jury,
                    o.moyenne_jury,
                    o.moyenne_alpha_jury,
                    o.classement_jury,
                    o.note_ects_jury,
                    o.nombre_credits_obtenus_jury,
                    o.calcul_scolarite_id,
                    o.choix_inscription_id,
                    o.est_non_noter,
                    o.entite_id,
                    o.gpa,
                    o.validee_par_compensation,
                    o.credits_potentiels_specifiques,
                    o.score,
                    o.gpa_jury,
                    o.echeancier_type_id,
                    o.numero_cve,
                    o.pas_de_cve,
                    o.exonere_de_cve,
                    o.motif_exoneration,
                    o.etat_cve_id,
                    o.lot_inscriptions_id
                   FROM t_inscriptions_module o
                  WHERE true) inscription_module
             LEFT JOIN t_modules module ON module.objet_id = inscription_module.module_id
             LEFT JOIN t_individus apprenant ON apprenant.objet_id = inscription_module.apprenant_id
          WHERE true AND module.code::text = 'MIM_ELC'::text
        ), credits AS (
         SELECT pp.pre_post AS "PRE_POST",
            apprenant.objet_id AS apprenant_id,
            apprenant.ind_particule AS numelv,
            apprenant.ind_nom,
            mode_admission.code AS mode_admission_code,
            inscr_mim_elc.objet_id AS inscr_mim_elc_id,
               -- CASE
                   -- WHEN mode_admission.code::text = 'VISITANT'::text THEN COALESCE(cours.creditpot_inscour, 0::numeric)
                  --  WHEN pp.pre_post::text = 'PRE2015_MIM'::text THEN GREATEST(100::numeric - modules_hors_mgt.credits_potentiels, 0::numeric)
                  --  WHEN pp.pre_post::text = 'POST2015_MIM'::text THEN GREATEST(90::numeric - modules_hors_mgt.credits_potentiels, 0::numeric)
                   -- WHEN pp.pre_post::text = 'REF2020_MIM'::text THEN GREATEST(94::numeric - modules_hors_mgt.credits_potentiels, 0::numeric)
                   -- WHEN pp.pre_post::text = 'POST2020_MIM'::text THEN GREATEST(94::numeric - modules_hors_mgt.credits_potentiels, 0::numeric)
                   -- WHEN pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text and module_mim_management."créditpotspe_inscmod" is not null  THEN module_mim_management."créditpotspe_inscmod"
                    --WHEN pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text and module_mim_management."créditpotspe_inscmod" is null then cours.creditpotspe_inscour
                    --when pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text and cours.creditpotspe_inscour is null then cours.creditpot_inscour
                    --when pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text and cours.creditpot_inscour is null then module_mim_management."créditpot_inscmod"
                    --when pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text and module_mim_management."créditpot_inscmod" is null then module_mim_management."CréditsModule"
                    --WHEN pp.pre_post::text = 'MIM_MANAGEMENT_COURSES'::text THEN module_mim_management."créditpotspe_inscmod"
                   -- ELSE 0::numeric
                --END AS credits_potentiels,
            COALESCE(cours.credits_obtenus, 0::numeric) AS credits_obtenus,
            coalesce(cours.creditpot_inscour,0::numeric) as creditpot_inscour,
            coalesce(creditpotspe_inscour,0::numeric) as creditpotspe_inscour,
              COALESCE(module_mim_management."créditpotspe_inscmod",0::numeric) as "créditpotspe_inscmod",
              COALESCE(module_mim_management."créditpot_inscmod",0::numeric) as "créditpot_inscmod",
            COALESCE(module_mim_management."CréditsModule",0::numeric) as  "CréditsModule"
              
           FROM t_individus apprenant
             JOIN t_inscriptions_programme inscription_diplome ON inscription_diplome.apprenant_id = apprenant.objet_id
             JOIN t_statuts_inscription statut_diplome ON statut_diplome.objet_id = inscription_diplome.statut_inscription_id AND (statut_diplome.code::text <> ALL (ARRAY['DECEDE'::character varying::text, 'DEMISSION'::character varying::text, 'EXCLUS'::character varying::text, 'DIPLOME'::character varying::text, 'NON_DIPLOME'::character varying::text]))
             JOIN t_groupes diplome ON diplome.objet_id = inscription_diplome.groupe_id AND diplome.code::text = 'MIM'::text
             JOIN t_relations dma ON dma.source_id = inscription_diplome.objet_id AND dma.relation_nom::text = 'inscription_programme-moded_admission.client§1531414'::text
             JOIN t_objets mode_admission ON mode_admission.objet_id = dma.dest_id AND mode_admission.type::text = 'moded_admission.client'::text AND NOT mode_admission.efface
             JOIN t_inscriptions_module inscr_mim_elc ON inscr_mim_elc.apprenant_id = apprenant.objet_id
             JOIN t_modules mim_elc ON mim_elc.objet_id = inscr_mim_elc.module_id AND mim_elc.code::text = 'MIM_ELC'::text
             JOIN ( SELECT am.apprenant_id,
                    module.code AS pre_post,
                    module.objet_id AS pre_post_id
                   FROM t_apprenants_modules am
                     JOIN t_modules module ON module.objet_id = am.module_id
                  WHERE module.code::text = ANY (ARRAY['PRE2015_MIM'::character varying::text, 'POST2015_MIM'::character varying::text, 'REF2020_MIM'::character varying::text, 'MIM_MANAGEMENT_COURSES'::text, 'POST2020_MIM'::character varying::text])) pp ON pp.apprenant_id = apprenant.objet_id
             JOIN t_arborescences_scolarite ligne_intermediaire_programme ON ligne_intermediaire_programme.module_id = mim_elc.objet_id AND ligne_intermediaire_programme.arborescence_programme_id = 2401812
             JOIN t_arborescences_scolarite ligne_intermediaire_programme__2 ON ligne_intermediaire_programme__2.objet_id = ligne_intermediaire_programme.ligne_parente_id AND ligne_intermediaire_programme__2.module_id = pp.pre_post_id
             LEFT JOIN cours ON cours.apprenant_id = apprenant.objet_id AND cours.ligne_parente_id = ligne_intermediaire_programme.objet_id
             LEFT JOIN modules_hors_mgt ON modules_hors_mgt.apprenant_id = apprenant.objet_id
             LEFT JOIN module_mim_management ON module_mim_management."id.Apprenant" = apprenant.objet_id
        ), validite AS (
         SELECT credits."PRE_POST",
            credits.apprenant_id,
            credits.numelv,
            credits.ind_nom,
            credits.mode_admission_code,
            credits.inscr_mim_elc_id,
           -- credits.credits_potentiels,
            credits.credits_obtenus,
                CASE
                    WHEN credits.mode_admission_code::text = 'VISITANT'::text AND credits.credits_obtenus > 0::numeric THEN true
                  --  ELSE COALESCE(credits.credits_obtenus, 0::numeric) >= COALESCE(credits.credits_potentiels, 0::numeric)
                END AS valide,
               
                credits.creditpot_inscour,
                credits.creditpotspe_inscour,
                credits."créditpotspe_inscmod",
                credits."créditpot_inscmod",
                credits."CréditsModule"
               
           FROM credits
        )
SELECT validite."PRE_POST",
    validite.apprenant_id,
    validite.numelv,
    validite.ind_nom,
    validite.mode_admission_code,
    validite.inscr_mim_elc_id,
   -- validite.credits_potentiels,
    validite.credits_obtenus,
    validite.valide,
   
    validite.creditpot_inscour,
    validite.creditpotspe_inscour,
    validite."créditpotspe_inscmod",
    validite."créditpot_inscmod",
    validite."CréditsModule",
   
        CASE
            WHEN validite.valide THEN 'true'::text
            ELSE 'false'::text
        END AS validation,
        CASE
            WHEN validite.valide THEN '10'::text
            ELSE '0'::text
        END AS note_numerique,
        CASE
            WHEN validite.valide THEN 'V'::text
            ELSE 'NV'::text
        END AS note_alpha,
       
        case
       
                    WHEN validite."PRE_POST"::text = 'MIM_MANAGEMENT_COURSES'::text then

                    
                case
                when  validite."créditpotspe_inscmod" is not null  THEN validite."créditpotspe_inscmod"
            WHEN  validite."créditpotspe_inscmod" is null then validite.creditpot_inscour
            when  validite.creditpotspe_inscour is null then validite.creditpot_inscour
            when  validite.creditpot_inscour is null then validite."créditpot_inscmod"
            when validite."créditpot_inscmod" is null then validite."CréditsModule"
                   
                    end
        END AS creditpot_final
       
       
       
   FROM validite
  WHERE validite.numelv::text = '203670'::text;



Merci bien

Hors ligne

#2 08/11/2022 03:13:18

rjuju
Administrateur

Re : Condition cas when sur plusieur champs qui ne marche pas.

Bonjour,

Ma requette sort plusieur colonne:

"créditpotspe_inscmod"=0
creditpot_inscour =0
creditpot_inscour= 24
"créditpot_inscmod" =0
"CréditsModule"  =0

Je voudrais valorisé dans une colonne finale (ici creditpot_final) avec une condition Case When la valeur de l'un des champs précédent selon qu'ils soient nulle ou pas.

Test du bbcode FluxBB


ici il devrait  afficher  24 dans creditpot_final.

Quelqu'un pourrais m'aider

Voici la condition que j'ai faites:

                WHEN validite."PRE_POST"::text = 'MIM_MANAGEMENT_COURSES'::text then

                   
                case
                when  validite."créditpotspe_inscmod" is not null  THEN validite."créditpotspe_inscmod"
            WHEN  validite."créditpotspe_inscmod" is null then validite.creditpot_inscour
            when  validite.creditpotspe_inscour is null then validite.creditpot_inscour
            when  validite.creditpot_inscour is null then validite."créditpot_inscmod"
            when validite."créditpot_inscmod" is null then validite."CréditsModule"
                   
                    end
        END AS creditpot_final


Mais cela ne marche pas.  dans creditpot_final j'ai 0


Je ne suis pas sûr de comprendre votre problème.  Si "créditpotspe_inscmod" vaut 0 alors par définition la colonne n'est pas nulle, et votre expression retourne donc cette valeur.

Hors ligne

#3 08/11/2022 20:41:36

Charle
Membre

Re : Condition cas when sur plusieur champs qui ne marche pas.

Bonjour Exactement merci j'ai modifié le code afin de ne plus retourner 0

Hors ligne

Pied de page des forums