Je me demande s'il est possible d'y arriver dans MS Access 2007:conditionnelle REJOIGNEZ
Un client m'a donné plusieurs tables, et on m'a demandé pour certaines requêtes. L'un d'entre eux doit obtenir une valeur de champ à partir d'une table, en fonction de la valeur d'un champ de chaque enregistrement. Cela signifie, selon la région, qu'il faut regarder une table, une seconde ou une troisième.
Alors, je me demandais si je pouvais faire quelque chose comme ceci:
SELECT
table2.some_value
FROM
table1
INNER JOIN table2
ON CASE table1.SOME_VALUE THEN table3.id = table2.some_id ELSE
CASE table1.SOME_VALUE THEN table4.id = table2.some_id ELSE
table5.id = table2.some_id END END
Est-il clair? Si ce n'est pas le cas, il suffit de demander et je répondrai à vos doutes.
EDIT:
Je pense que je ne suis pas assez clair. J'ai plusieurs jointures dans ma requête, mais j'ai cette dernière, dans laquelle son instruction ON sera différente, en fonction des données. Par exemple:
J'ai un enregistrement dans une table qui a un champ d'état, avec trois possibilités: CA, TX, FL.
Si la valeur est CA, l'instruction ON de ce JOIN doit être CA_Standard_table.field = myTable.field.
Si c'est TX, la déclaration sur de ce REJOIGNEZ devrait être TX_Standard_table.field = myTable.field
Et la même logique vaut pour FL.
Comment puis-je accomplir cela?
EDIT 2:
Voici le code de requête, le dernier JOIN est celui qui compte pour cela. Les trois possibilités de tables à se joindre à la déclaration ON sont:
- EU_Accepted_Standards
- CA_Accepted_Standards
- NZ_Accepted_Standards
Il décidera de l'un d'eux, en fonction de laquelle des champs suivants sont vérifiés:
- CAStandard: cela devrait prendre CA_Accepted_Standards.
- EUSelStandard: cela devrait prendre EU_Accepted_Standards.
- NZ_Accepted_Standards: il devrait prendre NZ_Accepted_Standards
Recherche
SELECT
Projects.COMPAS_ID,
Projects.[Opportunity Name],
IIf([VolCap]=True,1) AS [Volume Cap],
IIf([DelGuarantee]=True,1) AS [Delivery Guarantee],
Projects.Tech_Level_Name,
Counterparty.CPExpertise,
Counterparty.CPFinStrength,
Geographic_Location.Country_RiskLevel,
Project_Stage_Risk.ProStaRiskLevel,
Counterparty.CPExperience,
Projects.Country_Name,
IIf([EU ETS]=True,1) AS EU,
IIf([CA ETS]=True,1) AS CA,
IIf([NZ ETS]=True,1) AS NZ,
IIf([Australia ETS]=True,1) AS Australia,
IIf([CAProjectType] is not null, CA_Accepted_Projects.CAPTRiskLevel,
IIf([EUSelProjType] is not null, EU_ETS_Standards.EUPTRiskLevel,
IIf([NZSelProjType] is not null, NZ_Accepted_Projects.NZPTRiskLevel))) as [Risk Level],
IIf([CAStandard] is not null, CA_Accepted_Standards.CAStanRiskLevel,
IIf([EUSelStandard] is not null, EU_Accepted_Standards.EUStanRiskLevel,
IIf([NZSelStandard] is not null, NZ_Accepted_Standards.NZStanRiskLevel))) as [Standard Risk]
FROM
Project_Stage_Risk
INNER JOIN (((((((((Counterparty
INNER JOIN Projects
ON Counterparty.CPID = Projects.[Counter Party])
INNER JOIN Geographic_Location
ON Projects.Country_Name = Geographic_Location.Country_Name)
left JOIN CA_Accepted_Projects
ON Projects.CAProjectType = CA_Accepted_Projects.CA_ProjectTypes)
left JOIN NZ_Accepted_Projects
ON Projects.NZSelProjType = NZ_Accepted_Projects.NZ_StandardID)
left JOIN EU_ETS_Standards
ON Projects.EUSelProjType = EU_ETS_Standards.EU_StandardID)
left JOIN CA_Accepted_Standards
ON Projects.CAStandard = CA_Accepted_Standards.ID)
left JOIN NZ_Accepted_Standards
ON Projects.NZSelStandard = NZ_Accepted_Standards.ID)
left JOIN EU_Accepted_Standards
ON Projects.EUSelStandard = EU_Accepted_Standards.ID)
left join Emissions_Trading_Systems
ON Emissions_Trading_Systems.ETS = EU_Accepted_Standards.ETS)
ON Project_Stage_Risk.ProStaID = Projects.[Project Stage];
Je pense que je n'étais pas assez clair. J'ai une table que je dois joindre à 3 autres tables, mais MS Access ne me laissera pas insérer un alias à chaque JOIN, donc je ne peux pas les joindre tous les trois en même temps. –
S'il vous plaît montrer votre code complet et le message d'erreur exacte que vous obtenez. –
CASE ... WHEN n'est pas pris en charge par le moteur de base de données Access. – HansUp