我有一个附加查询,其中包含Excel Sheet作为数据源。今天,其中一个字段的基础数据已从String
更改为Long
。在我的查询表中,我将此特定字段计算为:
MSCI: Left([bp_msci_ic_key];2)
为了补偿基础数据格式的变化,我把它改为......
MSCI: Left(*Str*([bp_msci_ic_key]);2)
不幸的是,查询会生成#ERROR ... 为什么这种方法不起作用?
这里是整个SQL语句的语法:
INSERT INTO tbl_Position(
MoPo_ID,
AssetClass_Sub_ID,
VALOR,
ISIN,
[Currency],
Position_Name,
Weight,
Rating,
Asset_Country,
Issuer_Country,
Position_Duration,
Position_YieldToMaturity,
MSCI_Code,
PosValue)
SELECT
qry_Position_Load_step1.MoPo_BM_ID,
qry_Position_Load_step1.AssetClass_Sub_ID,
qry_Position_Load_step1.VALOR,
qry_Position_Load_step1.ISIN,
IIf([qry_Position_load_step1]![ccy] Is Null And Left([qry_Position_load_step1]![classsub],2)="M_", Mid([qry_Position_load_step1]![classsub],3,Len([qry_Position_load_step1]![classsub])-1),[qry_Position_load_step1]![CCY]) AS CCY,
qry_Position_Load_step1.NAME_SHORT,
qry_Position_Load_step1.Val,
tbl_MopoRohdaten.rating_clir,
tbl_MopoRohdaten.ass_domi_country,
tbl_MopoRohdaten.iss_domi_country,
tbl_MopoRohdaten.pos_dur_mod,
tbl_MopoRohdaten.pos_ytm,
Left(Str([bp_msci_ic_key]),2) AS MSCI,
tbl_MopoRohdaten.pos_eop_value
FROM
qry_Position_Load_step1
LEFT JOIN tbl_MopoRohdaten ON
(qry_Position_Load_step1.MoPo_Name_Avaloq = tbl_MopoRohdaten.portf_name) AND
(qry_Position_Load_step1.ISIN = tbl_MopoRohdaten.asset_isin);
编辑:根据评论减少选择:
SELECT
tbl_MopoRohdaten.[bp_msci_ic_key] AS MSCI
FROM
qry_Position_Load_step1
LEFT JOIN tbl_MopoRohdaten ON
(qry_Position_Load_step1.MoPo_Name_Avaloq = tbl_MopoRohdaten.portf_name) AND
(qry_Position_Load_step1.ISIN = tbl_MopoRohdaten.asset_isin)
WHERE
(((tbl_MopoRohdaten.[bp_msci_ic_key]) Is Not Null));
答案 0 :(得分:0)
出现问题是因为基础数据有一个经纪/不完整的记录源。由于我还不确定的原因,ContextMenu
中只有一小部分基础数据被加载。由于查询在匹配数据时使用了双连接,因此它不断显示与其中一个连接匹配的记录。
但是,返回的结果从未包含我遇到问题的MSCI字段的任何数据。很自然地,当我使用tbl_MopoRohdaten
时,它返回了一个错误,因为该字段为CStr()
。