我有这个简单的T-SQL查询,它从一个表中发出一堆列,并连接来自其他相关表的信息。
我的数据模型很简单。我有个安排好的活动,有参与者。我需要知道每个活动有多少人参加。
对此,我的解决方案是添加一个CTE,它对计划的事件进行分组并计算参与者的数量。
这将允许我在每个预定的事件中加入该信息。保持查询的简单性。
我喜欢保持我的查询简单,但是,如果我在未来需要在我的简单查询期间有额外的临时结果可访问,我该怎么办?
我真的很想,如果我能有多个cte但是我不能,对吧?我在这里有什么选择?
我已经排除了视图和在应用程序数据层进行操作。我更喜欢隔离我的SQL查询。
您当然可以在一个查询表达式中包含多个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