我正在用一个相当简单的查询进行争论。但是,由于我的访问和SQL能力水平较低,我的当前项目遇到了障碍。详情如下,并提前感谢您的耐心等待。
基本上,我正在尝试使用历史财务数据来测试一个众所周知的破产预测模型。财务数据以年度格式存储(下表列表)。数据库的结构使得每个公司在公司记录表(IDX_FS
)中有一个通用信息记录,在财务报表数据表(DATA_BS
等)中有每年存在的多个记录。
在每个DATA表中,有一个字段包含每个公司[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]
日期设置为相同。该部分以洋红色突出显示。这仍然似乎不起作用,因为我只有1年的输出,当有20年的数据。此外,当我在没有表达式的情况下运行查询时,现有的参数给出了大约500条记录的输出。
感谢您的回复。所以,我已经采取了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
答案 0 :(得分:2)
当您加入同时拥有公司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
答案 1 :(得分:1)
尝试使用参数distinct,这将删除重复的值。