共用方式為


使用匯總查詢中的欄位 (Visual Database Tools)

適用於:SQL Server

當您建立匯總查詢時,查詢和檢視表設計工具 進行某些假設,以便建構有效的查詢。 例如,如果您要建立彙總查詢並將資料欄標示為輸出,查詢和檢視設計工具會自動將該欄加入 GROUP BY 子句中,這樣可以防止您不小心在摘要中顯示個別資料列的內容。

使用群組依據

查詢和檢視表設計工具會使用下列指導方針來處理資料行:

  • 當您選擇 [Group By] 選項或將聚合函數新增至查詢時,所有標記為輸出或用於排序的欄位都會自動新增至 GROUP BY 子句。 如果某個欄位已經是聚合函數的一部分,則不會自動加入 GROUP BY 子句。

    如果您不想讓特定欄位成為 GROUP BY 語句的一部分,您必須在 [準則] 窗格的 [群組方式] 欄位中選取其他選項,手動變更它。 不過,查詢和檢視表設計工具不會阻止您選擇會導致查詢無法執行的選項。

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

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

  • 如果網格中的 依據 的欄位未顯示(因為您尚未指定匯總查詢),則搜尋條件將放入 WHERE 子句中。

  • 如果您已經在匯總查詢中,且已在 [群組依據] 列中選擇 [Where] 選項,則搜尋條件會放在 WHERE 子句中。

  • 如果 Group By 欄位包含 Where以外的任何值,則將搜尋條件放在 HAVING 子句中。

使用 HAVING 和 WHERE 子句

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

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

  • WHERE 子句可用來選取用於摘要和分組的數據列子集,因此會在完成任何群組之前套用。 因此,即使數據行不是 GROUP BY 子句的一部分或包含在聚合函數中,您也可以在 WHERE 子句中使用數據行。 例如,下列語句會選取成本超過 $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 子句的一部分。

另請參閱

匯總查詢結果 (Visual Database Tools)
排序和群組查詢結果 (Visual Database Tools)