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 :

Requête : Jointure Complexe


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut Requête : Jointure Complexe
    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)[/

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Et si tu essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and d.compte_nature like (select distinct compte_nature  || '%'
    from dwh_r_cpt_coll_compte_nature)
    Peut etre que ca peut fonctionner.
    Bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse, mais le problème est juste avant, à savoir que le 'like' prends comme attribut une valeur et non une liste de valeurs !
    Mais merci de ta réponse

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    je ne voit pas ce qui vous empêche de faire une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    INNER JOIN dwh_r_cpt_coll_compte_nature cn
    ON d.compte_nature like LIKE cn.compte_nature || '%'
    A +

  5. #5
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Et ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and d.compte_nature IN (select distinct compte_nature from dwh_r_cpt_coll_compte_nature)

Discussions similaires

  1. Requête avec jointure complexe
    Par leeloo95 dans le forum Requêtes et SQL.
    Réponses: 20
    Dernier message: 16/12/2009, 15h52
  2. [requêtes] Jointures
    Par Ptit_boeuf dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2005, 10h23
  3. Problème requête jointure
    Par Isa31 dans le forum Langage SQL
    Réponses: 36
    Dernier message: 16/05/2005, 13h46
  4. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  5. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 16h18

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