簡體   English   中英

將附加查詢與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;

我想將值移動到表中。 為此,我在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語句。

先感謝您。

埃米爾。

可以更聰明/更快地做到這一點嗎?

我使用它的示例:

1122

將多個SQL語句組合成一個“大型查詢”需要使用子查詢,例如

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

確實會大大提高您的性能。 不管數字是來自一個大型復合查詢還是幾個保存的QueryDef對象,處理數字的工作可能比解析SQL代碼花費更多的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM