46

我们如何在 SQL Server 的子查询中使用 CTE?

喜欢:

SELECT id (I want to use CTE here), name FROM table_name

4

3 回答 3

51

只需在顶部定义您的 CTE 并在子查询中访问它?

WITH YourCTE(blubb) AS
(
    SELECT 'Blubb'
)
SELECT id,
       (SELECT blubb FROM YourCTE),
       name
FROM   table_name
于 2009-12-16T11:47:20.720 回答
14

它不起作用:

select id (I want to use CTE here), name from table_name

在子查询中不能使用 CTE。

您可以将其视为一种解决方法:

CREATE VIEW MyCTEView AS ..here comes your CTE-Statement.

然后你可以这样做:

select id (select id from MyCTEView), name from table_name
于 2012-12-13T12:53:29.067 回答
2

使用所有 CTE 的 UNION 集创建具有 CTE/多个 CTE 的视图

CREATE VIEW [dbo].[_vEmployees] 
AS 
    WITH 
    TEST_CTE(EmployeeID, FirstName, LastName, City, Country)
        AS (
            SELECT EmployeeID, FirstName, LastName, City, Country FROM Employees WHERE EmployeeID = 4
        ), 
    TEST_CTE2
        AS (
            SELECT EmployeeID, FirstName, LastName, City, Country FROM Employees WHERE EmployeeID = 7
        )
    SELECT EmployeeID, FirstName, LastName, City, Country FROM TEST_CTE UNION SELECT * FROM TEST_CTE2
GO

在此处输入图像描述

现在,将其用于子查询

SELECT * FROM Employees WHERE EmployeeID IN (SELECT EmployeeID FROM _vEmployees)

在此处输入图像描述

于 2020-10-02T23:24:35.597 回答