2016-09-19 3 views
1

Я пытаюсь соединить четыре таблицы, и я получаю сообщение об ошибке «Ошибка синтаксиса в регистрации Expression»MS Access 2007 SQL Синтаксис ошибки в регистрации выражение

Пожалуйста, найдите ниже запроса В настоящее время я пытаюсь написать

SELECT a.*, 
switch(a.[Start Date] between b.[SEASON1START] and b.[SEASON1END],b.[LRA_S1_RT1_SGL], 
a.[Start Date] between c.[SEASON1START] and c.[SEASON1END],c.[LRA_S1_RT1_SGL], 
a.[Start Date] between d.[SEASON1START] and d.[SEASON1END],d.[LRA_S1_RT1_SGL]) as [Negotiated Rate Local], 
switch(a.[Start Date] between b.[SEASON1START] and b.[SEASON1END], 
b.[RATE_CURR],a.[Start Date] between c.[SEASON1START] and c.[SEASON1END],c.[RATE_CURR], 
a.[Start Date] between d.[SEASON1START] and d.[SEASON1END],d.[RATE_CURR]) as [Negotiated Currency] 
FROM ((([Q1001 - Split Transactions] a 
left join [2014 Negotiated Rate] b on (a.[RX_ID] = b.[PROPCODE] And YEAR(a.[Start Date] = 2014)) 
left join [2015 Negotiated Rate] c on (a.[RX_ID] = c.[PROPCODE] And YEAR(a.[Start Date] = 2015)) 
left join [2016 Negotiated Rate] d on (a.[RX_ID] = d.[PROPCODE] And YEAR(a.[Start Date] = 2016)) ; 

ответ

2

MS Access не допускает константы в статье on. Решение? Переключитесь на лучшую базу данных. Подожди. Это не всегда вариант. Итак, подзаголовки на помощь:

FROM ((([Q1001 - Split Transactions] a left join 
     (SELECT b.*, 2014 as yyyy FROM [2014 Negotiated Rate] as b 
     ) as b 
     on a.[RX_ID] = b.[PROPCODE] And YEAR(a.[Start Date]) = b.yyyy 
     ) left join 
     (SELECT c.*, 2015 as yyyy FROM [2015 Negotiated Rate] as c 
     ) as c 
     on a.[RX_ID] = c.[PROPCODE] And YEAR(a.[Start Date]) = c.yyyy 
    ) left join 
     (SELECT d.*, 2016 as yyyy FROM [2016 Negotiated Rate] as d 
    ) as d 
     on a.[RX_ID] = d.[PROPCODE] And YEAR(a.[Start Date]) = d.yyyy 
    ) 
+0

Спасибо за ответ, однако я все равно получаю такую ​​же ошибку даже после замены кода в соответствии с вашим предложением. –

+0

«Переключиться на лучшую базу данных» слишком честно :) – onedaywhen

+0

@AyanMukherje. , , Я думал, что подзапрос это сделает. Возможно, необходим вид. –

1

Ваш исходный запрос должен работать. В MS Access вы можете иметь выражения в статьях ON, например WHERE (хотя сложные выражения не могут быть просмотрены в Design View только в SQL View).

В частности, вы не произвольно обертываете функцию YEAR(). Рассмотрим следующую корректировку:

FROM ((([Q1001 - Split Transactions] a 
left join [2014 Negotiated Rate] b 
     on (a.[RX_ID] = b.[PROPCODE] And YEAR(a.[Start Date]) = 2014)) 
left join [2015 Negotiated Rate] c 
     on (a.[RX_ID] = c.[PROPCODE] And YEAR(a.[Start Date]) = 2015)) 
left join [2016 Negotiated Rate] d 
     on (a.[RX_ID] = d.[PROPCODE] And YEAR(a.[Start Date]) = 2016));