2013-10-04 47 views
0

我有三個MS Access表。它們是Income_Statements,Balance_SheetsCash_Flow_Statements。這些表共享相同的主鍵。這是一個三字段主鍵,其中包括Ticker,[Year]Period。我想結合所有這三個表,而不重複主鍵字段。我有一個需要滿足的日期標準。我需要顯示的記錄與我從名爲dtpDateSelectionDateTimePicker中選擇的日期相同或更早。合併表的SQL語法

這是我到目前爲止有:

Dim year As String = dtpDateSelection.Value.Year 
Dim quarter As String = ((dtpDateSelection.Value.Month - 1) \ 3) + 1 

Dim cmd2 As OleDbCommand = New OleDbCommand("SELECT Ticker, [Year], Period, Income_Statements.Net_Income, Balance_Sheets.Total_Assets, Cash_Flow_Statements.Net_Cash_Flow_Operating FROM Income_Statements, Balance_Sheets, Cash_Flow_Statements WHERE Period < 5 AND Period <= #" & quarter & "# AND [Year] <= #" & year & "#", con) 
Dim quarterlyReader As OleDbDataReader = cmd2.ExecuteReader() 
Dim Quarterly As New DataTable 

Quarterly.Load(quarterlyReader) 
DataGridViewScreen.DataSource = Quarterly 
quarterlyReader.Close() 

我有我的WHERE聲明麻煩。我該如何做這項工作?

+1

很難告訴你沒有看到你是如何解析的的DateTimePicker正在做什麼。但它看起來好像你可能錯過了JOIN或兩個JOIN。 – Plutonix

+0

我可以這樣做:''選擇*從Income_Statements,Balance_Sheets,Cash_Flow_Statements WHERE期間<5和期間<=#「&季度&#與AND [年] <=#」&年&「#」'與'JOIN'語句的某處? – gromit1

+1

您需要一個'JOIN'(即「組合」)並使用這些主鍵。見Linger的回答 – Plutonix

回答

3

如何加入表一起,並指定字段你想要的:

SELECT i.Ticker, i.[Year], i.Period, i.Net_Income, 
    b.Total_Assets, c.Net_Cash_Flow_Operating 
FROM (Income_Statements AS i 
    INNER JOIN Balance_Sheets AS b 
    ON (i.Ticker = b.Ticker) AND (i.[Year] = b.[Year]) AND (i.Period = b.Period)) 
    INNER JOIN Cash_Flow_Statements AS c 
    ON (b.Ticker = c.Ticker) AND (b.[Year] = c.[Year]) AND (b.Period = c.Period) 
WHERE i.Period <= #" & quarter & "# 
    AND i.[Year] <= #" & year & "#" 
+0

這很好用!無論如何,在這裏加入一個*(從表格中選擇字段)? – gromit1

+1

你可以合併你想要的任何字段,如果你想從所有三個表中拉出每個字段,你可以使用'SELECT i。*,b。*,c。*'。 – Linger

+0

這正是我所需要的。再次感謝! – gromit1

3

您的WHERE子句以兩種方式處理Period列 - 作爲整數和日期(這就是哈希符號暗示的),它不能同時存在。

+0

太棒了!這清除了第一個錯誤信息。另一個我得到的是'指定的字段'Ticker'可以引用多於一個列在你的SQL語句的FROM子句中的表。'我該如何解決這個問題? – gromit1

+1

您需要至少指定哪個表 – Plutonix

+2

您需要爲表名添加前綴以解決歧義問題,因此Income_Statements.Ticker應該可以工作。 – Rikalous