GROUP BY 與 ALL
Transact-SQL 在 GROUP BY 子句中提供 ALL 關鍵字。ALL 只在 SELECT 陳述式也包含 WHERE 子句時才有意義。
附註: |
---|
新版的 Microsoft SQL Server 將會移除 GROUP BY ALL。請避免在新的開發工作使用 GROUP BY ALL,並計劃修改目前使用此子句的應用程式。 |
GROUP BY ALL 不應該用在存取遠端資料表的查詢中。在這類查詢中如果同時有 WHERE 子句,該子句即不被支援,而且如果沒有使用 WHERE 子句,該子句也無法加入任何值。
如果使用 ALL,查詢結果將包含 GROUP BY 子句所產生的所有群組,即使有些群組並沒有任何資料列符合搜尋條件。如果沒有 ALL,包含 GROUP BY 的 SELECT 陳述式不會顯示沒有資料列符合資格的群組。
第一個範例僅針對數量大於 10 的 訂單產生群組。
第二個範例則為所有訂單產生群組。
對於沒有任何資料列符合資格的群組,包含彙總數值 (平均價格) 的資料行將為 NULL。
USE AdventureWorks;
GO
SELECT ProductID, AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ProductID
ORDER BY ProductID ;
GO
以下為結果集:
ProductID Average Price
707 20.7765
708 20.7482
709 6.175
711 20.7285
712 5.7592
714 32.05
.............................
(114 row(s) affected)
-- Using GROUP BY ALL
USE AdventureWorks;
GO
SELECT ProductID, AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ALL ProductID
ORDER BY ProductID ;
GO
以下為結果集:
ProductID Average Price
707 20.7765
708 20.7482
709 6.175
710 NULL
711 20.7285
712 5.7592
..............................
Warning: Null value is eliminated by an aggregate or other SET operation.
(266 row(s) affected)
請參閱
其他資源
ALL (Transact-SQL)
SELECT (Transact-SQL)