将追加查询与 MS Access 中的常规查询相结合
Combine an append query with regular queries in MS Access
我有以下 3 个问题。第一个从数据总量中取出相关数据:
SELECT
(n()-1)*[Forms]![f_Main]![PowerBinCombo] & ' - ' & n()*[Forms]![f_Main]![PowerBinCombo] & " kW" AS Bin,
q_DataLimited.POW001,
q_DataLimited.WSP001,
q_DataLimited.POW002,
q_DataLimited.WSP002
FROM q_DataLimited
WHERE
(
((q_DataLimited.POW001)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW001)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Reference Turbine')
AND ((q_DataLimited.[VG's])='Without')
)
OR
(
(
(q_DataLimited.POW002)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW002)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Power Curve Upgraded Turbine')
AND ((q_DataLimited.[VG's])='Without')
);
以及计算平均值和标准差的查询:
SELECT q_PowerBinned.Bin, Avg(q_PowerBinned.POW001) AS AvgOfPOW001, StDev(q_PowerBinned.POW001) AS StDevOfPOW001, Avg(q_PowerBinned.WSP001) AS AvgOfWSP001, StDev(q_PowerBinned.WSP001) AS StDevOfWSP001, Avg(q_PowerBinned.POW002) AS AvgOfPOW002, StDev(q_PowerBinned.POW002) AS StDevOfPOW002, Avg(q_PowerBinned.WSP002) AS AvgOfWSP002, StDev(q_PowerBinned.WSP002) AS StDevOfWSP002, Count(q_PowerBinned.Bin) AS CountOfBin
FROM q_PowerBinned
GROUP BY q_PowerBinned.Bin;
我想将值移动到 table。为此,我在 Access 中使用追加查询。 SQL 看起来像:
INSERT INTO t_Average_Stored ( Bin, PowAvg001, WindAvg001, PowAvg002, WindAvg002, n_samples, PowDev001, WindDev001, PowDev002, WindDev002 )
SELECT q_Average_Temp.Bin, q_Average_Temp.AvgOfPOW001, q_Average_Temp.AvgOfWSP001, q_Average_Temp.AvgOfPOW002, q_Average_Temp.AvgOfWSP002, q_Average_Temp.CountOfBin, q_Average_Temp.StDevOfPOW001, q_Average_Temp.StDevOfWSP001, q_Average_Temp.StDevOfPOW002, q_Average_Temp.StDevOfWSP002
FROM q_Average_Temp;
这个怎么合二为一SQL?
我的SQL还不够强,所以我努力结合一些查询来优化它们。如果能简要说明答案背后的原因,我将不胜感激,这样我就可以将其应用于其他类似的 SQL 语句。
提前致谢。
埃米尔
这可以做到吗smarter/faster?
我使用它的例子:
将多个 SQL 语句组合成一个 "mega query" 需要使用子查询,例如
SELECT subquery.Column1, AVG(subquery.Column2) AS AvgOfColumn2 ...
FROM
(
SELECT Column1, Column2, ...
FROM tablename
WHERE ...
) AS subquery
GROUP BY subquery.Column1
但是,如果您已经将子查询存储为 Access 中保存的查询对象,那么我怀疑将外部查询重写为
INSERT INTO newtable ( Column1, ... )
SELECT statsquery.Column1, ...
FROM
(
SELECT subquery.Column1, AVG(subquery.Column2) AS AvgOfColumn2 ...
FROM
(
SELECT Column1, Column2, ...
FROM tablename
WHERE ...
) AS subquery
GROUP BY subquery.Column1
) AS statsquery
确实会给您带来很大的性能提升。处理数字所花费的时间可能比解析 SQL 代码要花费更多的时间,无论该代码是来自一个大型复合查询还是来自几个已保存的 QueryDef 对象。
我有以下 3 个问题。第一个从数据总量中取出相关数据:
SELECT
(n()-1)*[Forms]![f_Main]![PowerBinCombo] & ' - ' & n()*[Forms]![f_Main]![PowerBinCombo] & " kW" AS Bin,
q_DataLimited.POW001,
q_DataLimited.WSP001,
q_DataLimited.POW002,
q_DataLimited.WSP002
FROM q_DataLimited
WHERE
(
((q_DataLimited.POW001)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW001)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Reference Turbine')
AND ((q_DataLimited.[VG's])='Without')
)
OR
(
(
(q_DataLimited.POW002)>(n()-1)*[Forms]![f_Main]![PowerBinCombo]
And (q_DataLimited.POW002)<n()*[Forms]![f_Main]![PowerBinCombo]
)
AND (([Forms]![f_Main]![BinOnTurbine])='Power Curve Upgraded Turbine')
AND ((q_DataLimited.[VG's])='Without')
);
以及计算平均值和标准差的查询:
SELECT q_PowerBinned.Bin, Avg(q_PowerBinned.POW001) AS AvgOfPOW001, StDev(q_PowerBinned.POW001) AS StDevOfPOW001, Avg(q_PowerBinned.WSP001) AS AvgOfWSP001, StDev(q_PowerBinned.WSP001) AS StDevOfWSP001, Avg(q_PowerBinned.POW002) AS AvgOfPOW002, StDev(q_PowerBinned.POW002) AS StDevOfPOW002, Avg(q_PowerBinned.WSP002) AS AvgOfWSP002, StDev(q_PowerBinned.WSP002) AS StDevOfWSP002, Count(q_PowerBinned.Bin) AS CountOfBin
FROM q_PowerBinned
GROUP BY q_PowerBinned.Bin;
我想将值移动到 table。为此,我在 Access 中使用追加查询。 SQL 看起来像:
INSERT INTO t_Average_Stored ( Bin, PowAvg001, WindAvg001, PowAvg002, WindAvg002, n_samples, PowDev001, WindDev001, PowDev002, WindDev002 )
SELECT q_Average_Temp.Bin, q_Average_Temp.AvgOfPOW001, q_Average_Temp.AvgOfWSP001, q_Average_Temp.AvgOfPOW002, q_Average_Temp.AvgOfWSP002, q_Average_Temp.CountOfBin, q_Average_Temp.StDevOfPOW001, q_Average_Temp.StDevOfWSP001, q_Average_Temp.StDevOfPOW002, q_Average_Temp.StDevOfWSP002
FROM q_Average_Temp;
这个怎么合二为一SQL?
我的SQL还不够强,所以我努力结合一些查询来优化它们。如果能简要说明答案背后的原因,我将不胜感激,这样我就可以将其应用于其他类似的 SQL 语句。
提前致谢。
埃米尔
这可以做到吗smarter/faster?
我使用它的例子:
将多个 SQL 语句组合成一个 "mega query" 需要使用子查询,例如
SELECT subquery.Column1, AVG(subquery.Column2) AS AvgOfColumn2 ...
FROM
(
SELECT Column1, Column2, ...
FROM tablename
WHERE ...
) AS subquery
GROUP BY subquery.Column1
但是,如果您已经将子查询存储为 Access 中保存的查询对象,那么我怀疑将外部查询重写为
INSERT INTO newtable ( Column1, ... )
SELECT statsquery.Column1, ...
FROM
(
SELECT subquery.Column1, AVG(subquery.Column2) AS AvgOfColumn2 ...
FROM
(
SELECT Column1, Column2, ...
FROM tablename
WHERE ...
) AS subquery
GROUP BY subquery.Column1
) AS statsquery
确实会给您带来很大的性能提升。处理数字所花费的时间可能比解析 SQL 代码要花费更多的时间,无论该代码是来自一个大型复合查询还是来自几个已保存的 QueryDef 对象。