-- SQL create view with CTE (Common Table Expression)
USE AdventureWorks
GO
CREATE VIEW vSalesStaffQuickStats
AS
WITH SalesBySalesPerson (SalesPersonID, NumberOfOrders, MostRecentOrderDate)
AS
(
SELECT SalesPersonID, COUNT(*), MAX(OrderDate)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID
)
SELECT E.EmployeeID,
EmployeeOrders = OS.NumberOfOrders,
EmployeeLastOrderDate = OS.MostRecentOrderDate,
E.ManagerID,
ManagerOrders = OM.NumberOfOrders,
ManagerLastOrderDate = OM.MostRecentOrderDate
FROM HumanResources.Employee AS E
INNER JOIN SalesBySalesPerson AS OS
ON E.EmployeeID = OS.SalesPersonID
LEFT OUTER JOIN SalesBySalesPerson AS OM
ON E.ManagerID = OM.SalesPersonID
GO
-- T-SQL test view
SELECT * FROM vSalesStaffQuickStats
ORDER BY EmployeeID
GO
原文链接:http://www.sqlusa.com/bestpractices2005/viewwithcte/