我目前在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 我需要在我的CrossTab程序中创建一个VB.net查询,该查询将生成这个表:
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语句是什么?
发布于 2013-09-25 20:15:09
使用交叉选项卡查询,这样您就不需要在Access SQL中“硬连接”Year和Qtr值。
此外,我认为ExecuteNonQuery是从SELECT查询中检索数据的错误方法。但是,这是任务的VB.Net部分,我只能在Access SQL方面帮助您。
我将查询源中的示例数据存储在一个名为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;https://stackoverflow.com/questions/19012184
复制相似问题