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クエリに複数のが含まれている場合、Accessdbエンジンでは句に括弧が必要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

ただし、dbエンジンが、どの結合フィールドがどのテーブルソースからのものであるかを分類するのに混乱するかどうかはわかりません。これらのフィールド名の前に適切なテーブルエイリアスを付けます。

しかし、これを楽しむための最も直接的な方法は、クエリデザイナのデザインビューで新しいクエリを開始することかもしれません。エイリアス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_EQUITYMappingの3つの異なるコピーをtbl_EQUITYINPUTで結合しています。しかし、それはあなたがやりたいことではないと思います。tbl_EQUITYMappingからデータをプルしている場合、selectはどのコピーからデータをプルするかを認識しません。

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のコピーは1つだけ取得します。

同様に、次のようなこともできます。

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 に答える