2013-10-19 105 views
0

我用一个相当简单的查询来争论。但是,鉴于我的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 
+1

清理你的问题,它的非可读 –

回答

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 
+0

非常感谢你和Gord! – user2898577

1

尝试使用不同的参数,这将删除重复的值。