Requête SQL HELP

Fermé
Michel77220 - 4 oct. 2022 à 16:59
jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 - 21 oct. 2022 à 11:56

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

jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
4 oct. 2022 à 17:07

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

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

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
jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
7 oct. 2022 à 16:52

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
Michel77220
21 oct. 2022 à 11:49
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
jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
21 oct. 2022 à 11:56

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