2013-10-19 95 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

嘗試使用不同的參數,這將刪除重複的值。