我目前在 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
现在,该表显示了以下列:“Ticker”、“Year”、“Qtr”和“Qtr_Growth”,每行代表每个股票代码每年的每个季度。
我需要它显示“股票行情”、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 语句是什么?
使用交叉表查询,这样您就不需要“硬线” Year
and Qtr
Access SQL 中的值。
我也觉得ExecuteNonQuery
从 a 中检索数据的方法是错误的SELECT
询问。但是,这是该任务的 VB.Net 方面,我只能帮助您使用 Access SQL。
我将查询源中的示例数据存储在名为的表中您的查询.
在 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)