我正在处理一个相当简单的查询。但是,由于我的访问和SQL能力水平较低,因此我目前的项目遇到了障碍。详细信息如下,在此先感谢大家的耐心配合。
基本上,我正在尝试使用历史财务数据来测试众所周知的破产预测模型。财务数据以“年度”格式存储(下表列出)。该数据库的结构使得每个公司在公司记录表(IDX_FS)中都有一个常规信息记录,而在财务报表数据表(DATA_BS等)中每个存在年份都有多个记录。
IDX_FS
DATA_BS
在每个DATA表中,都有一个字段,其中包含每个公司的数据记录的特定年份[4DTYR]及其各自的财务数据。该字段中的数据重复存在,并且存在于每个公司以及存在的每一年。
[4DTYR]
例如:
[CONAME] [4DTYR] [A_TOTAL] Apple Inc. 2009 200 Apple Inc. 2010 220 Apple Inc. 2011 240 Google Inc. 2009 180 Google Inc. 2010 170 Google Inc. 2011 160
我[4DTYR]遇到的问题是,该字段中的数据存在并在各种表中重复,这些表使用这些表中的数据来计算少数表达式中的算术运算,最后我得到大量重复(看起来是一个排列) )数据输入到我的查询输出中。
除了SQL脚本外,我还详细介绍了下表,字段和表达式。请注意,我尝试添加一个条件WHERE,尝试[4DTYR]将不同表中的所有日期设置为相同。该部分以洋红色突出显示。这似乎仍然行不通,因为只有20年的数据时,我只能获得1年的输出。此外,当我运行不带表达式的查询时,现有的参数为我提供了约500条记录的输出。
WHERE
感谢您的回复。因此,我接受了Gords的建议,并在下面进行了修改。但是,我收到一个JOIN语法错误。请注意,IDX_FS包含CUSIP字段,但不包含4DTYR字段。因此,我使用AND将其添加到原始语句中。有什么建议吗?非常感谢。
FROM (((IDX_FS LEFT JOIN DATA_BS ON IDX_FS.CUSIP = DATA_BS.CUSIP) LEFT JOIN DATA_Footnotes ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP) LEFT JOIN DATA_IS ON IDX_FS.CUSIP = DATA_IS.CUSIP) LEFT JOIN DATA_SP ON IDX_FS.CUSIP = DATA_SP.CUSIP AND (((DATA_BS LEFT JOIN DATA_IS ON DATA_BS.CUSIP = DATA_IS.CUSIP AND DATA_BS.4DTYR = DATA_IS.4DTYR) LEFT JOIN DATA_SP ON DATA_BS.CUSIP = DATA_SP.CUSIP AND DATA_BS.4DTYR = DATA_SP.4DTYR) LEFT JOIN DATA_Footnotes.4DTYR ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
当联接同时具有公司ID[CUSIP]和年份[4DTYR]的表时,您仅联接[CUSIP],因此在相关表中,[4DTYR]的各种排列也将获得重复的行有那个领域。您需要同时加入[CUSIP]和 [4DTYR]以避免重复。
在Access的查询设计器中,此类联接将显示为在每个表之间运行的 两 行:一个将[CUSIP]连接到[CUSIP],另一个将[4DTYR]连接到[4DTYR]。在SQL中,联接看起来像
... TableX LEFT JOIN TableY ON TableX.CUSIP = TableY.CUSIP AND TableX.4DTYR = TableY.4DTYR