我目前在MS Access中有一个名为Quarterly_Growth_Rates的查询,该查询生成下表:
Ticker Year Qtr Qtr_Growth AAPL 2013 3 21.46 AMZN 2013 3 12.59 BBBY 2013 3 4.11 GOOG 2013 3 0.04 V 2013 3 5.13 AAPL 2013 2 -10.27 AMZN 2013 2 4.01 BBBY 2013 2 10.98 GOOG 2013 2 10.74 V 2013 2 7.66 AAPL 2013 1 -20.07 AMZN 2013 1 4.07 BBBY 2013 1 14 GOOG 2013 1 10.39 V 2013 1 10.17
我需要在我的VB.net程序中创建一个CrossTab查询,该查询将生成此表:
Ticker 2013-3 2013-2 2013-1 AAPL 21.46 -10.27 -20.07 AMZN 12.59 4.01 4.07 BBBY 4.11 10.98 14 GOOG 0.04 10.74 10.39 V 5.13 7.66 10.17
因此,现在该表显示以下列:每一个行情自动收录器的每一年的每个季度,行,行,年,Qtr和Qtr_Growth行。
我需要它来显示Ticker,2013-1、2012-4、2012-3列,每个股票行情只显示一行。
到目前为止,我的程序中已有以下代码:
Dim cmd4 As OleDbCommand = New OleDbCommand("SELECT Ticker FROM Quarterly_Growth_Rates GROUP BY Ticker PIVOT Qtr ", Nordeen_Investing_3.con) cmd4.ExecuteNonQuery()
此MS Access CrossTab查询的正确SQL语句是什么?
使用交叉表查询,这样就无需在Access SQL中 “硬接线” Year和Qtr值。
Year
Qtr
我也认为ExecuteNonQuery从SELECT查询中检索数据是错误的方法。但是,那是在此任务的VB.Net方面,我只能为您提供Access SQL的帮助。
ExecuteNonQuery
SELECT
我将来自您的查询源的样本数据存储在名为 YourQuery 的表中。
在Access 2007中,下面的第一个查询为我提供了此结果集:
Ticker 2013-1 2013-2 2013-3 AAPL -20.07 -10.27 21.46 AMZN 4.07 4.01 12.59 BBBY 14 10.98 4.11 GOOG 10.39 10.74 0.04 V 10.17 7.66 5.13
它仅在列顺序上与请求的输出不同。如果要按时间段降序排列列,请使用第二个查询。
另请注意,我的数据源是一个表,但您的是一个查询。我提到了这种差异,因为在构建交叉表时,可以通过从查询的源表开始,找到一种更直接的方式来获取所需的信息。
TRANSFORM First(y.Qtr_Growth) AS FirstOfQtr_Growth SELECT y.Ticker FROM YourQuery AS y GROUP BY y.Ticker PIVOT y.Year & '-' & y.Qtr; TRANSFORM First(y.Qtr_Growth) AS FirstOfQtr_Growth SELECT y.Ticker FROM YourQuery AS y GROUP BY y.Ticker ORDER BY y.Year & '-' & y.Qtr DESC PIVOT y.Year & '-' & y.Qtr;