0

我正在与一个相当简单的查询争吵。但是,鉴于我的 Access 和 SQL 能力水平较低,我在当前项目中遇到了障碍。详细信息如下,并提前感谢大家的耐心等待。

基本上,我正在尝试使用历史财务数据来测试一个众所周知的破产预测模型。财务数据以年度格式存储(下表列出)。该数据库的结构使得每家公司在公司记录表IDX_FSDATA_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]不同表中的所有日期设置为相同。该部分以洋红色突出显示。这似乎仍然不起作用,因为当有 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
4

2 回答 2

2

When you are joining the tables that have both the company ID [CUSIP] and the year [4DTYR] you are only joining on [CUSIP], so you are getting duplicate rows for the various permutations of [4DTYR] in the related tables that also have that field. You need to join on both [CUSIP] and [4DTYR] to avoid those duplicates.

In Access' query designer such joins will appear as two lines running between each table: one connecting [CUSIP] to [CUSIP] and the other connecting [4DTYR] to [4DTYR]. In SQL the joins will look something like

... TableX LEFT JOIN TableY ON TableX.CUSIP = TableY.CUSIP AND TableX.4DTYR = TableY.4DTYR
于 2013-10-19T19:51:48.233 回答
1

尝试使用参数 distinct,这将删除重复值。

于 2013-10-19T19:22:38.850 回答