0

我有两个 Microsoft Access 数据库表。它们被命名为Historical_Stock_PricesBalance_Sheets。我需要组合这些表中的每一个表中的数据来创建一个名为Daily. 我需要取字段Ticker,[Date][Close]from Historical_Stock_Prices,我需要取字段Common_Stocksfrom Balance_Sheets

我不会从Historical_Stock_Pricesand中取出每一行Balance_Sheets。我只会采用在DateTimePicker命名中选择的日期上或之前的行dtpDateSelection

现在我遇到的主要问题是Historical_Stock_Prices每天都包含一行。虽然Balance_Sheets每个季度包含一行。因此,对于一个季度中的每一天Common_Stocks,来自的数字Balance_Sheet将是相同的。

我该怎么做呢?

这是我到目前为止的代码:

Dim Date1 As Date = dtpDateSelection.Value
Dim cmd As OleDbCommand = New OleDbCommand("CREATE PROC Daily AS SELECT Ticker, [Date], [Close] From Historical_Stock_Prices WHERE [Date] = " & Date1 & "", con)
cmd.ExecuteNonQuery()

这显然根本不包含表格Balance_Sheet。另外,目前我的 where 语句正在引发错误。

附加信息:表架构

资产负债表架构

Historical_Stock_Prices 模式

4

3 回答 3

2

创建包含 2 个新字段 Quarter 和 Year 的 Historical_Stock_Prices 查询,并使用适当的函数从行的日期中提取这些值。然后使用这些字段连接您的两个表。您在 VB 中的最后陈述应该与该查询相反。

至于为什么您在 SQL 语句上收到错误,您没有在参数周围加上 # 。

Dim cmd As OleDbCommand = New OleDbCommand("CREATE PROC Daily AS SELECT Ticker, [Date], [Close] From Historical_Stock_Prices WHERE [Date] = #" & Date1 & "#", con)

请注意,这仍然是不好的形式,只是在等待 SQL 注入攻击。最好查看如何使用参数化查询。

于 2013-10-02T19:51:13.860 回答
2

在 Historical_Stock_Prices 和 Balance_Sheets 共有的季度内加入。也就是说,每个日期都在一个季度内。如果 Balance_Sheets 有一个名为 Period 的字段,它是数字 1、2、3 或 4,对应于一年中的每个季度,并且您有一个 Year 字段是一个 4 位数字,那么这个选择查询应该可以工作并且可以轻松转换进入生成表查询。

select Ticker, Date, Close, Common_Stocks
from Historical_Stock_Prices, Balance_Sheets
where Format(Historical_Stock_Prices.Date, "q") = Balance_Sheets.Period
      and Year(Historical_Stock_Prices.Date) = Balance_Sheets.Year
于 2013-10-02T19:44:30.867 回答
2
"SELECT [H].[Ticker], [H].[Date], [H].[Close], [B].[Common_Stocks] 
FROM [Historical_Stock_Prices] AS [H], [Balance_Sheets] AS [B] 
WHERE [H].[Ticker] = [B].[Ticker] 
AND Int(Format([H].[Date],'Q')) = Int([B].[Period]) 
AND Int(Year([H].[Date])) = Int([B].[Year]) 
AND [H].[Date] <= #" & Date1.value & "#"
于 2013-10-02T20:21:21.387 回答