Common Table Expressions

כשיש שאילתות מורכבות אפשר לפשט אותן.

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