כשיש שאילתות מורכבות אפשר לפשט אותן.
WITH <CTE name>
AS
(<CTE_definition>)
<Outer Query referencing CTE>
את השאילתא:
SELECT
p.ProductName,
c.CategoryName,
p.UnitPrice
FROM Products p JOIN Categories c
ON c.CategoryID = p.CategoryID
WHERE p.UnitPrice > 10.0
אפשר לכתוב כך:
WITH products_and_categories (ProductName, CategoryName, UnitPrice)
AS (SELECT p.ProductName, c.CategoryName, p.UnitPrice
FROM Products p JOIN Categories c
ON c.CategoryID = p.CategoryID
WHERE p.UnitPrice > 10.0)
SELECT ProductName, CategoryName, UnitPrice
FROM products_and_categories
WITH – מגדיר את הכינוי. בחלק הזה אנחנו מגדירים את העמודות והטבלאות.
AS – בונים את השאילתא. סדר הכינויים חייב להתאים למה שהיה ב-with.
לאחר מכן אפשר לבנות את השאילתא בשימוש בכינויים החדשים.
עוד דוגמא:
WITH CTE_year
AS (SELECT YEAR(orderdate) AS orderyear, customerid
FROM orders )
SELECT
orderyear,
count(DISTINCT customerid) AS cust_count
FROM CTE_year
GROUP BY orderyear