我用一个相当简单的查询来争论。但是,鉴于我的Access和SQL能力水平低下,我在当前的项目中遇到了障碍。详情如下,并提前感谢您的耐心等待。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]
存在字段中的数据,并且重复从该数据被用于在表达式一小撮计算arithmatic的问题,我的查询输出中有大量的重复数据(以及看起来是一个置换)的数据。
除了SQL脚本之外,我已经详细说明了下面的表格,字段和表达式。请注意,我试过在WHERE
下添加一个条件,试图将不同表中的所有[4DTYR]
日期设置为相同。该部分以洋红色突出显示。这似乎仍然不起作用,因为只有20年的数据时,我才能获得1年的产出。此外,当我运行没有表达式的查询时,现有的参数给我输出约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
清理你的问题,它的非可读 –