我正在尝试使用Windows中的外部vbs文件vbscript从访问表中获取多个小计。
mySQL = "SELECT [Data.Time],"& Quantity &"*Sum([Data.Price]) AS
SumOfPrice FROM Data WHERE ( ( [Data.Ticker] Like '"& CE1 &"'
Or [Data.Ticker] Like '"& CE2 &"' Or [Data.Ticker] Like '"& CE3 &"'
Or [Data.Ticker] Like '"& CE4 &"' Or [Data.Ticker] Like '"& CE5 &"'
Or [Data.Ticker] Like '"& PE1 &"' Or [Data.Ticker] Like '"& PE2 &"'
Or [Data.Ticker] Like '"& PE3 &"' Or [Data.Ticker] Like '"& PE4 &"'
Or [Data.Ticker] Like '"& PE5 &"'
) AND ([Data.DateTr]=#"& DateIn &"#))
GROUP BY [Data.Time] HAVING [Data.Time] > #"& startTime(i) &"# and (((Count([Data.Ticker]))= 10))"
进一步处理......
objRecordSet2.Open mySQL,objConnection, adOpenStatic, adLockOptimistic
objRecordSet2.MoveFirst
Do Until objRecordSet2.EOF
If objRecordSet2.Fields.Item(1) > testvalue
目前,每次(每1分钟)提供一次CE + PE总计 必须确保每个时刻恰好有5条CE记录和5条PE记录,因此总共10条。
我们可以对其进行修改以单独提供CE和PE的总计。 SELECT Time,SumofCEPrice,SumofPEPrice每1分钟
答案 0 :(得分:0)
您可以通过将select
语句更改为以下内容来使用条件聚合:
"SELECT [Data.Time]," & Quantity & "*Sum(iif([Data.Ticker] Like '" & CE1 & "' or [Data.Ticker] Like '" & CE2 & "' or [Data.Ticker] Like '" & CE3 & "' or [Data.Ticker] Like '" & CE4 & "' or [Data.Ticker] Like '" & CE5 & "',[Data.Price],0)) AS SumofCEPrice "
具有以类似方式构建的SumofPEPrice
列。
答案 1 :(得分:0)
只需将 Ticker 添加为GROUP BY
中的另一个分组变量。另外请考虑以下项目:
任何没有通配符LIKE
或%
的{{1}}表达式都是多余的,应使用等式*
。实际上,您甚至可以在这里使用=
子句;
应将未聚合的列排除在IN()
之外,并放在HAVING
子句中;
使用DAO和ADO连接支持的参数化。
调整后的SQL字符串
WHERE
或者,将参数化与ADO Command一起使用:
"SELECT [Data.Time], [Data.Ticker], "& Quantity &" * Sum([Data.Price]) AS SumOfPrice " & _
" FROM Data " & _
" WHERE ( " & _
" ( [Data.Ticker] = '"& CE1 &"' " & _
" OR [Data.Ticker] = '"& CE2 &"' OR [Data.Ticker] = '"& CE3 &"' " & _
" OR [Data.Ticker] = '"& CE4 &"' OR [Data.Ticker] = '"& CE5 &"' " & _
" OR [Data.Ticker] = '"& PE1 &"' OR [Data.Ticker] = '"& PE2 &"' " & _
" OR [Data.Ticker] = '"& PE3 &"' OR [Data.Ticker] = '"& PE4 &"' " & _
" OR [Data.Ticker] = '"& PE5 &"' " & _
" ) " & _
" AND ([Data.DateTr] = #" & DateIn & "#)" & _
" AND ([Data.Time] > #" & startTime(i) & "#) " & _
" ) " & _
" GROUP BY [Data.Time], [Data.Ticker] " & _
" HAVING Count(([Data.Ticker]) = 10)"