Introduction
The WITH Common Table Expression (CTE) is used for creating temporary named result sets. The functionality was introduced in SQL Server 2005. This T-SQL Expression begins with the keyword WITH. The results from the WITH expression are stored in a temporary named result set that can be queried. Using the WITH expression, allows for the simplification of query logic, by allowing the separation of logic into separate steps. The WITH expression has a few basic parts:
-
WITH [name of temporary resultset] (columns in result set)
-
AS ( SQL Query Definition )
following the 'WITH' keyword is the name of the temporary result set being created and the names of the columns in the result set. Parentheses are placed around the column names.
following the 'AS' keyword will be the SQL Query (surrounded by parentheses). The number of columns selected in the query must match the number of columns listed in the Table Expression Definition (the columns listed after name of resultset).
Beginning Example
This example will use the following table:
SELECT Name, Position, Salary
FROM Employees
Here is the resultset from the above SELECT query:
| Name | Position | Salary |
| Joe Grape | Manager | 80000 |
| John Plum | Software Developer | 65000 |
| Frank Apple | Software Developer | 62000 |
| Patty Pineapple | Software Developer | 60000 |
| Judy Peach | Software Developer | 50000 |
| Jane Orange | Project Manager | 75000 |
Using the WITH expression we can create a temporary named result set. In this example we will limit the result set to only the Software Developers from the above Employees table.
WITH Developers (Name,Salary)
AS
(
SELECT Name, Salary FROM Employees WHERE Position = 'Software Developer'
)
SELECT * FROM Developers
Here is the resultset from the above SELECT query from the 'Developers' result set:
| Name | Salary |
| John Plum | 65000 |
| Frank Apple | 62000 |
| Patty Pineapple | 60000 |
| Judy Peach | 50000 |
|