Bonjour,
J'utilise MS SQL Server 2017 sur une base de données que j'ai convertie d'une version compact à une version "full MS SQL".
Vous trouverez ci-joint le script de création des tables qui entrent en jeu dans ma recherche
J'utilise la requête suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 select ref_typ_eve.prefixe_sync_eve, type_deb.libelle_type AS type_debut, debut.no_post AS debut, type_fin.libelle_type AS type_fin, fin.no_post AS fin from anomalie left join evenement on anomalie.evenement_id = evenement.evenement_id left join ref_typ_eve on evenement.type_evenement_id = ref_typ_eve.type_evenement_id left join ouvrage debut on evenement.deb_ouvrage_id = debut.ouvrage_id left join ref_typ_ouv type_deb on debut.type_ouvrage_id = type_deb.type_ouvrage_id left join ouvrage fin on evenement.fin_ouvrage_id = fin.ouvrage_id left join ref_typ_ouv type_fin on fin.type_ouvrage_id = type_fin.type_ouvrage_id
La table ouvrage liste des ouvrages. Chacun d'eux a un type type_ouvrage_id explicité dans ref_typ_ouv.
Les ouvrages portent des évènements (dans la table evenement) qui peuvent être entre autres des anomalies (type_evenement_id = 1, abréviation ANM). Ces anomalies ont une adresse de début et une adresse de fin sur un tronçon, qui s'exprime selon les ouvrages du tronçon.
Le problème est que dans ma table ouvrage, les ouvrages de type 'extremite' (type_ouvrage_id = 2) n'ont pas de numéro postal 'no_post' et ma requête doit renvoyer 'AMONT' ou 'AVAL'.
J'ai donc essayé de remplacer 'debut.no_post AS debut' (et je dois faire de même avec 'fin.no_post AS fin' par
mais j'obtiens un message d'erreur 4104 - L'identificateur en plusieurs parties "extremite.type_extremite" ne peut pas être lié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 iif(debut.no_post IS NULL, iif(extremite.type_extremite=1, 'amont', 'aval'), debut.no_post) AS debut,
Je n'ai aucune idée des fonctionnalités ou instructions qui me permettraient d'atteindre mon but dans ce cas.
J'utiliserai ce code pour huit select différents, deux fois à chaque fois, donc si une procédure ou fonction est possible, ça me faciliterait grandement la tâche
En espérant n'avoir rien oublié d'essentiel...
Merci d'avance (et déjà pour toute l'aide que j'ai trouvé sur le site et le forum pour résoudre différents problèmes auxquels j'ai été confrontés)
Partager