我们如何在sql server中的子查询中使用CTE?

时间:2009-12-16 11:40:21

标签: sql sql-server tsql sql-server-2005 common-table-expression

我们如何在sql server中的子查询中使用CTE?

喜欢..

选择 ID (我想在这里使用CTE), 名称 来自table_name

3 个答案:

答案 0 :(得分:41)

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

WITH YourCTE(blubb) AS
(
    SELECT 'Blubb'
)
SELECT id,
       (SELECT blubb FROM YourCTE),
       name
FROM   table_name

答案 1 :(得分:13)

不起作用:

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

答案 2 :(得分:0)

使用CTE /具有所有CTE的UNION集的多个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

enter image description here

现在,将其用于子查询

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

enter image description here