J'ai la requête suivante : (en italique ca n'a pas d'importance par contre regardez la partie en gras)
execute (create table temp2_recouv_col as
select d.identifiant_national,
b.budget_collectivite_oid,
d.compte_nature,
case
when e.libelle_nature_piece='ANNULATION_REDUCTION' and d.montant_ttc >= 0 then -d.montant_ttc
else d.montant_ttc
end
as montant_ttc,
case
when j.sous_article_role_oid is not null then j.sous_article_role_oid
else d.ligne_titre_oid
end
as cle_factice
from dwh_r_poste_comptable a,
dwh_r_budget_collectivite b,
dwh_f_titre c,
dwh_f_ligne_titre d,
dwh_r_nature_piece e,
dwh_r_type_piece f,
dwh_r_cpt_coll_compte_nature g,
dwh_r_type_bgt_collectivite h,
temp1_recouv_col i,
dwh_f_sous_article_role j
where a.num_poste = b.num_poste
and b.identifiant_national = c.identifiant_national
and c.titre_oid = d.titre_oid
and c.nature_titre_pic = e.nature_piece_pic
and c.type_titre_pic = f.type_piece_pic
and b.type_budget_collectivite_pic = g.type_budget_collectivite_pic
/* and d.compte_nature = g.compte_nature */ and d.compte_nature like (select distinct compte_nature
from dwh_r_cpt_coll_compte_nature) and b.type_budget_collectivite_pic = h.type_budget_collectivite_pic
and d.ligne_titre_oid = i.ligne_titre_oid
and d.ligne_titre_oid = j.ligne_titre_oid (+)
and f.libelle_type_piece in ('TITRE_CORRECTIF',
'TITRE_EMIS_APRES_ENCAISSEMENT',
'TITRE_MAJORATION',
'TITRE_ORDINAIRE',
'TITRE_PLUSIEURS_ANNEES',
'TITRE_RECAPITULATIF_AVEC_ROLE')
and a.dte_deb_validite_poste_compt <= to_date(&code_date_fin,'YYYYMMDDHH24MISS')
and (a.dte_fin_validite_poste_compt is null
or a.dte_fin_validite_poste_compt >= to_date(&code_date_fin,'YYYYMMDDHH24MISS'))
and b.date_creation <= to_date(&code_date_fin,'YYYYMMDDHH24MISS')
and (b.date_dissolution is null
or b.date_dissolution >= to_date(&code_date_fin,'YYYYMMDDHH24MISS'))
and (b.identifiant_national_princ is null
or upper(h.lib_type_budget_collectivite) in ('EAU_ASSAINISSEMENT','EAU_ASSAINISSEMENT_ABREGEE'))
L'idée c donc de réaliser une jointure complexe dans le sens
où l'on souhaite récupérer tous les comptes présents dans la table dwh_r_cpt_coll_compte_nature.
Là vous vous dites que je suis un crétin, mais l'idée c'est qu'il ne s'agit pas d'une jointure simple car il y a une problématique de compte_nature père & des fils qui sont un sous ensemble (les pères sont sur 3 digits et les fils sur 6).
Par exemple
J'ai dans la table de fait , le compte père 751,
je souhaite donc prendre le compte 751 et tous ses fils, soit l'expression
a.compte_nature like '751%',
j'en arrive à la question :
cette formulation en gras est donc inexecutable en l'état, le like ne s'appliquant qu'à une valeur et non à une liste exhaustive de valeurs.
Je ne sais pas si j'ai été trés clair, et si vous m'avez compris,
si oui, j'espère que l'un d'entre vous pourra me filer un coup de main sur cette question !
Merci d'avance
d.compte_nature like (select distinct compte_nature
from dwh_r_cpt_coll_compte_nature)[/
Partager