共用方式為


在匯總查詢中使用資料行 (Visual Database Tools)

適用於:SQL Server

當您建立匯總查詢時, 查詢和檢視表設計工具 (Visual Database Tools) 會進行特定假設,以便建構有效的查詢。 例如,如果您要建立匯總查詢並將數據行標示為輸出,查詢和檢視表設計工具會自動讓 子句的數據行部分成為子句的 GROUP BY 一部分,讓您不小心嘗試在摘要中顯示個別數據列的內容。

使用群組依據

查詢與檢視設計器會使用下列指導方針來處理欄位:

  • 當您選擇 [群組依據] 選項或將聚合函數新增至查詢時,標示輸出或用於排序的所有數據行都會自動新增至 GROUP BY 子句。 如果數據行已經是聚合函數的一部分, GROUP BY 則不會自動新增至 子句。

    如果您不想讓特定數據行成為 子句的 GROUP BY 一部分,您必須在 [準則] 窗格的 [群組依據] 資料行中選取不同的選項,以手動變更它。 不過,查詢和檢視設計工具不會阻止您選擇會導致查詢無法執行的選項。

  • 如果您手動將查詢輸出數據行新增至 [準則] 或 [SQL] 窗格中的聚合函數,查詢和檢視表設計工具不會自動從查詢中移除其他輸出數據行。 因此,您必須從查詢輸出中移除其餘的數據行,或將它們設為 子句或聚合函數的一部分 GROUP BY

當您在 [準則] 窗格的 [篩選] 資料行中輸入搜尋條件時,查詢和檢視設計工具會遵循下列規則:

  • 如果未顯示方格的 [群組依據 ] 資料行(因為您尚未指定匯總查詢),搜尋條件就會放入 子句中 WHERE

  • 如果您已經在匯總查詢中,並已選取 [群組依據] 數據行中的 [位置] 選項,搜尋條件就會放入 子句中WHERE

  • 如果 [群組依據] 數據行包含 Where 以外的任何值,搜尋條件就會放在 子句中 HAVING

使用 HAVING 和 WHERE 子句

下列原則說明如何在搜尋條件中參考聚合查詢中的欄位。 一般而言,您可以在搜尋條件中使用數據行來篩選應該摘要的數據列(a WHERE 子句),或判斷最終輸出中出現的群組結果(a HAVING 子句)。

  • 個別數據行可以出現在 或 HAVING 子句中WHERE,視查詢中其他地方的使用方式而定。

  • WHERE 子句可用來選取用於摘要和分組的數據列子集,因此會在完成任何群組之前套用。 因此,即使數據行不是 子句的GROUP BYWHERE部分或包含在聚合函數中,您還是可以在 子句中使用數據行。 例如,下列語句會選取成本超過 $10.00 的所有標題,並平均價格:

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • 如果您建立包含子句或聚合函數中也使用之數據行的 GROUP BY 搜尋條件,則搜尋條件可以顯示為 WHERE 子句或子句 -您可以在建立條件時決定哪一個 HAVING 。 例如,下列語句會為每個發行者建立標題的平均價格,然後針對平均價格大於 $10.00 的發行者顯示平均值:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • 如果您在搜尋條件中使用聚合函數,條件會牽涉到摘要,因此必須是 子句的 HAVING 一部分。