Requête SQL HELP

Michel77220 -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

Sur une base de donnée Tarifaire je cherche à avoir le tarif actuel et le tarif futur,

A l'exécution de la requête suivante j'ai le message

]ORA-00918: column ambiguously defined
 

Merci pour votre aide

SELECT
TAR_STE "STE",
TAR_TYPE "TYPE TARIF",
TAR_REF "CODE TARIF",
ar_num "Code Article",
Actuel.TAR_DATE "DATE TARIF CLT",
Actuel.RFC_MTHT "PV HTHD Actuel",
Futur.TAR_DATE "DATE FUTUR TARIF CLT",
Futur.RFC_MTHT "PV HTHD Futur"

FROM ABLRC.T_ARTICLE

-- Actuelle date Client
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
from ABLRC.t_entarif t1
left join ABLRC.t_detarif on t1.tar_cle=rfc_cle
where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date<=sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
 Actuel on tar_ste=ar_ste and tar_art=ar_num

-- Future date Client
left join
(select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,E2.rfc_mtht
from ABLRC.t_entarif t1
left join ABLRC.t_detarif E2 on t1.tar_cle=E2.rfc_cle
where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date>sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
 Futur on tar_ste=ar_ste and tar_art=ar_num

WHERE AR_STE='32'
and ar_num = '11315'
;
 


Windows / Chrome 105.0.0.0

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    Bonjour,

    Vu le message d'erreur,  je suppose que tu es sur ORACLE (quelle version ? ) et non pas sur une base de données SQL SERVER.

    Je déplace donc la question dans le bon forum.

    Pour ce qui est de ton erreur,  tu ferais bien d'utiliser des ALIAS partout.  Je vois que tu as mis un "t1" pour une de tes tables .. et qu'ensuite dans ta requête tu fais appel à un "t2" dont je ne trouve pas la déclaration..

    Et puis.. au lieu de t1 t2 .. il est plus simplet d'utiliser des alias en rapport avec le nom des tables

    par exemple

    from ABLRC.t_entarif ET
    left join ABLRC.t_detarif  DT on ET.tar_cle= DT.rfc_cle

    Tu remarqueras également que le code que je t'ai posté est "bien formaté" sur le forum... pour ça, lorsque tu postes du code sur le forum, merci d'utiliser le bouton prévu à cet effet.. 


    0
  2. Tessel75
     

    Bonjour,

    Pas plus tard qu'hier j'ai fait une requête du style que tu proposes. Je te mets la syntaxe pour que tu puisses t'y retrouver. Je ne pratique pas du tout Oracle, mais s'il s'agit de SQL peut-être cela pourra-t-il t'aider.

    Ainsi, tu écrit 2 fois "Left Join" alors qu'il me semble qu'il ne faut l'écrire qu'une fois, mais par contre mettre "and" pour indiquer la 2ème liaison.

    Ma requête SQL, avec mes tables et mes champs s'écrit ainsi :

    "SELECT DISTINCT T_Services.NomService, T_BanqueAcc.LienSite, T_BanqueAcc.IB123, T_BanqueAcc.Act
    FROM T_BanqueAcc LEFT JOIN T_Services ON (T_BanqueAcc.IB123 = T_Services.NoIndexService) AND (T_BanqueAcc.Act = T_Services.IdFonction)
    WHERE (((T_Services.NomService) Is Not Null) AND ((T_Services.NoImmeubleService)=[forms]![Appartements]![Immeuble])) OR (((T_Services.NomService) Is Not Null) AND ((T_BanqueAcc.Act)=1))
    "

    Enfin, juste une remarque toute personnelle que j'applique avantageusement depuis des années, c'est que, plutôt qu'écrire tes noms tout en majuscule avec des "_" pour séparer les fragments de noms, j'écris tout en minuscule avec des majuscules pour séparer les fragments de nom, ce qui rend la lecture bien  plus facile, comme tu peux le voir dans l'exemple que je t'ai donné.

    Bon courage

    0
  3. Michel77220
     

    Bonjour,

    Merci pour la compassion :)

    En fait ce n'est pas tout à fait cela que je cherche à faire,

    J'ai un fichier Article avec plusieurs dates de mise à jour des prix de ventes,

    Ces dates sont antérieures ou postérieurs à la date du jour,

    Je cherche à récupérer la dernière date avant ce jour et la futur

    Il y a une table Article et une table Tarif,

    La requete ci-dessous fonction sur la partie -- Actuelle date

    Mais lorsque je rajoute la partie  -- Futur date

    j'ai le message -00918: column ambiguously defined

    Merci pour l'aide

    Michel

    SELECT

    TAR_STE "STE",

    TAR_TYPE "TYPE TARIF",

    TAR_REF "CODE TARIF",

    ar_num "Code Article",

    Actuel.TAR_DATE "DATE TARIF CLT",

    Futur.TAR_DATE "DATE FUTUR TARIF CLT"

    FROM ABLRC.T_ARTICLE

    -- Actuelle date

    left join

    (select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht

    from ABLRC.t_entarif t1

    left join ABLRC.t_detarif on t1.tar_cle=rfc_cle

    where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date<=sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))

    Actuel on tar_ste=ar_ste and tar_art=ar_num

    -- Futur date

    left join

    (select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht

    from ABLRC.t_entarif t1

    left join ABLRC.t_detarif on t1.tar_cle=rfc_cle

    where tar_date in (select max(t2.tar_date) from ABLRC.t_entarif t2 where t2.tar_date>sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))

    Futur on tar_ste=ar_ste and tar_art=ar_num

    ;

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      Bonjour,

      Je t'ai demandé d'utiliser l'icone qui sert à poster du code sur le forum afin qu'il s'affiche proprement !

      Je t'ai également demandé de renommer tes alias de façon plus parlante .. et plus important .. de les utiliser PARTOUT dans tes conditions.

      0
  4. Michel77220
     
    SELECT
    TAR_STE "STE",
    TAR_TYPE "TYPE TARIF",
    TAR_REF "CODE TARIF",
    ar_num "Code Article",
    Actuel.TAR_DATE as DA,
    Actuel.RFC_MTHT "PVDA",
    Futur.TAR_DATE "DATE FUTUR TARIF CLT",
    Futur.RFC_MTHT "PV HTHD Futur"
    
    FROM ABLRC.T_ARTICLE
    
    -- Actuelle date Client
    left join
    (select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
    from ablrc.t_entarif t1
    left join ablrc.t_detarif on t1.tar_cle=rfc_cle
    where tar_date in (select max(t2.tar_date) from ablrc.t_entarif t2 where t2.tar_date<=sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
    Actuel on tar_ste=ar_ste and tar_art=ar_num
    
    -- Future date Client
    left join
    (select tar_ste,tar_type,tar_prix,tar_pxnet,tar_datefin,tar_date,tar_ref,tar_art,rfc_mtht
    from ablrc.t_entarif t1
    left join ablrc.t_detarif on t1.tar_cle=rfc_cle
    where tar_date in (select max(t2.tar_date) from ablrc.t_entarif t2 where t2.tar_date>sysdate and t2.tar_ste=t1.tar_ste and t2.tar_ref=t1.tar_ref and t2.tar_art=t1.tar_art))
    Futur on tar_ste=ar_ste and tar_art=ar_num
    
    WHERE AR_STE='32'
    and ar_num = '11315'
    ;

    Bonjour

    j'ai simplifiée ma requête et j'ai le message

    ORA-00918: column ambiguously defined
     

    Merci pour votre aide

    Michel

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      Je vais te donner un exemple

      SELECT T1.*
            ,T2.nom AS T2_NOM
      FROM  matable1 T1
      LEFT JOIN matable2 T2 ON T2.id = T1.id
      WHERE T1.nom = "toto"
      0