1

在此处输入图像描述在此处输入图像描述以下查询需要帮助。谢谢

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
4

2 回答 2

1

当您的查询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

但是,我不确定数据库引擎是否会混淆排序哪个连接字段来自哪个表源。我会在这些字段名称前加上正确的表别名。

但我认为您为此感到高兴的最直接途径可能是从查询设计器的设计视图中的新查询开始。添加tbl_EQUITYINPUT和 3 个副本tbl_EQUITYMapping并分配别名。然后在设计视图中设置它们之间的连接。查询设计器了解使引擎满意的联接规则,因此将指导您使用正确的联接语法。它还将在您的联接中包含带有字段名称的别名。

于 2013-02-26T18:19:27.390 回答
0

我想知道是否对加入哪个 tbl_EQUITYMapping 实例感到困惑。

我希望看到你的 from 块看起来更像这样:

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_EQUITYINPUT 连接三个不同的 tbl_EQUITYMapping 副本。但我不认为这是你想要做的。如果您从 tbl_EQUITYMapping 中提取数据,则选择将不知道从哪个副本中提取数据。

我希望 SchemeCode_Client、SecurityCode_Client 和 Brokercode_Client 形成 tbl_EQUITYMapping 的复合键。在这种情况下,我会期望一个看起来像这样的 from 块。

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)

(设计师可能会也可能不会在以前的版本中为您优化)

于 2013-02-26T17:27:48.620 回答