将附加查询与MS Access中的常规查询组合在一起

时间:2015-02-12 09:54:46

标签: sql 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')
    );

和查询计算平均值和StDev:

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;

我想将值移到表格中。为此,我在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语句。

提前谢谢。

埃米尔。

这可以更智能/更快地完成吗?

我用它的例子:

11 22

1 个答案:

答案 0 :(得分:1)

将多个SQL语句组合成一个“大型查询”需要使用子查询,例如

SELECT subquery.Column1, AVG(subquery.Column2) AS AvgOfColumn2 ... 
FROM
    (
        SELECT Column1, Column2, ...
        FROM tablename
        WHERE ...
    ) AS subquery
GROUP BY subquery.Column1

但是,如果您已经将子查询存储为Access中保存的Query对象,那么我怀疑是否将外部查询重写为

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对象。