2013-02-26 4 views
1

enter image description hereenter image description here Помощь необходима для нижеследующего запроса. СпасибоЗапрос доступа Ms не работает. Пожалуйста, предложите

SELECT b.SchemeCode_Db, 
    'DBELE', 
    1, 
    SecurityCode_Db, 
    "DIRECT", 
    Qty, 
    Price, 
    ((Commission + TransferCharge)/Qty) AS Charges, 
    "", 
    iif(Buy_sell_code = "1110", 
      ((Qty * Price) + Commission + TransferCharge), 
      iif(Buy_sell_code = "1120", ((Qty * Price) - Commission 
        - TransferCharge 
       ))) AS totalCost, 
    BrokerCode_Db, 
    "", 
    Deal, 
    Format(Tradedate, "dd/MM/yyyy"), 
    Format(Valuedate, "dd/MM/yyyy"), 
    '', 'BSE', 'CH', 'D', '', 
    iif(Buy_sell_code = "1110", 
      'PUR', 
      iif(Buy_sell_code = "1120", 'SAL')) AS txn, 
    'USD' AS cur 
FROM tbl_EQUITYINPUT a 
LEFT JOIN tbl_EQUITYMapping b 
    ON FundCode = SchemeCode_Client 
LEFT JOIN tbl_EQUITYMapping c 
    ON Ticker = SecurityCode_Client 
LEFT JOIN tbl_EQUITYMapping d 
    ON Broker = Brokercode_Client 

ответ

1

Оператор доступа db требует скобок в предложении FROM, когда ваш запрос содержит более одного JOIN. Я подозреваю, что эта версия FROM станет шагом ближе к чему-то, что примет двигатель db.

FROM 
    ((tbl_EQUITYINPUT a 
    LEFT JOIN tbl_EQUITYMapping b 
     ON FundCode = SchemeCode_Client) 
    LEFT JOIN tbl_EQUITYMapping c 
     ON Ticker = SecurityCode_Client) 
    LEFT JOIN tbl_EQUITYMapping d 
     ON Broker = Brokercode_Client 

Однако, я неясно, будет ли перепутал дб двигатель перебирая которые соединяют поле поступают из какого источника таблицы. Я бы префикс этих имен полей с надлежащим псевдонимом таблицы.

Но я думаю, что ваш самый прямой путь к радости для этого может состоять в том, чтобы начать с нового запроса в Design View в конструкторе запросов. Добавьте tbl_EQUITYINPUT и 3 копии tbl_EQUITYMapping и назначьте псевдонимы. Затем настройте свои соединения между ними, пока они еще находятся в Design View. Дизайнер запросов понимает правила соединения, которые поддерживают работу двигателя, поэтому проведет вас к правильному синтаксису соединения. И это также будет включать псевдонимы с именами полей в ваших объединениях.

0

Мне интересно, не смущен ли какой-либо экземпляр tbl_EQUITYMapping для объединения.

я ожидал увидеть ваш от блока выглядят немного больше, как это:

select * 
FROM tbl_EQUITYINPUT a 
LEFT JOIN tbl_EQUITYMapping b 
ON a.FundCode = b.SchemeCode_Client 
LEFT JOIN tbl_EQUITYMapping c 
ON a.Ticker = c.SecurityCode_Client 
LEFT JOIN tbl_EQUITYMapping d 
ON a.Broker = d.Brokercode_Client 

В этом случае, вы присоединяетесь три копии tbl_EQUITYMapping с tbl_EQUITYINPUT. Но я не думаю, что это то, что вы хотите сделать. Если вы извлекаете данные из tbl_EQUITYMapping, выбор не будет знать, какую копию вывести из него.

Я ожидаю, что SchemeCode_Client, SecurityCode_Client и Brokercode_Client образуют составной ключ для tbl_EQUITYMapping. В этом случае я ожидал бы от блока, который бы выглядел так.

select * 
FROM tbl_EQUITYINPUT a 
LEFT JOIN tbl_EQUITYMapping b 
ON (a.FundCode = b.SchemeCode_Client 
     AND a.Ticker = b.SecurityCode_Client 
     AND a.Broker = B.Brokercode_Client) 

В этом случае, вы получите только один экземпляр tbl_EQUITYMapping

Вы могли одинаково хорошо сделать что-то вроде этого:

select * 
from tbl_EQUITYINPUT a, 
     tbl_EQUITYMapping b 
where 
    (a.FundCode = b.SchemeCode_Client 
     AND a.Ticker = b.SecurityCode_Client 
     AND a.Broker = B.Brokercode_Client) 

(проектировщик может или не может оптимизировать, что для вы в прежней версии)

+0

Я хочу, чтобы ваш первый запрос выполнялся. Он отлично работает в sql-сервере. но то же самое не работает в ms-доступе. Я новичок в ms доступ. – 2013-02-26 17:32:24

+0

Это тоже должно работать. Вы заметили, что я добавил a., B., C., И d. К предложениям from? – BIBD

+0

, когда имя поля отличается от a, b, c, бесполезно. мы можем напрямую использовать имя поля. – 2013-02-26 17:41:28

Смежные вопросы