您當然可以在一個查詢表達式中擁有多個CTE。你只需要用逗號分隔它們。這是一個例子。在下面的例子中,有兩個CTE。一個被命名爲CategoryAndNumberOfProducts
,另一個被命名爲ProductsOverTenDollars
。
WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS
(
SELECT
CategoryID,
CategoryName,
(SELECT COUNT(1) FROM Products p
WHERE p.CategoryID = c.CategoryID) as NumberOfProducts
FROM Categories c
),
ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS
(
SELECT
ProductID,
CategoryID,
ProductName,
UnitPrice
FROM Products p
WHERE UnitPrice > 10.0
)
SELECT c.CategoryName, c.NumberOfProducts,
p.ProductName, p.UnitPrice
FROM ProductsOverTenDollars p
INNER JOIN CategoryAndNumberOfProducts c ON
p.CategoryID = c.CategoryID
ORDER BY ProductName
就這麼簡單。 MSDN文檔在這個問題上有點模糊,我找不到任何結論。非常感謝你! – 2010-01-26 16:27:57
它記錄在[WITH common_table_expression(Transact-SQL)](http://msdn.microsoft.com/zh-cn/library/ms175972.aspx)中。你可以看到它在語法部分(特別注意'[WITH [,... n]]'中的'[,... n]'。例C「在多個CTE定義中使用一個單一的查詢「,會明確地調用它,可悲的是,這個例子在SQL 2008和更舊版本的文檔中沒有提供(例如,當OP發佈這個問題時沒有提供這個例子) –
Brian
2014-07-10 15:01:15