sql - 我可以像我的示例一样在 TSQL 中使用WITH两次来过滤结果集吗?

标签 sql sql-server common-table-expression

我需要做这样的事情,但 SQL Server 2008 不喜欢它。我的查询实际上比这更复杂,我意识到这不是完成我正在做的事情的最佳方式,但我的重点是WITH 语句的功能,而不是 select 和 where 语句。

WITH stuff1 AS ( select name, startdate, id from employees where startdate > 0 )

WITH stuff2 AS ( select name, startdate, id from stuff1 )

select * from stuff2 where id > 10

最佳答案

我一直这样做:

WITH stuff1 AS (
    SELECT name
           ,startdate
           ,id
    FROM employees
    WHERE startdate > 0
)
,stuff2 AS (
    SELECT name
           ,startdate
           ,id
    FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10

据我所知,我尚未达到 CTE 的限制。

唯一不能做的事情(这非常有用)是在单独的 SELECT 中重用 CTE:

WITH stuff1 AS (
    SELECT name
           ,startdate
           ,id
    FROM employees
    WHERE startdate > 0
)
,stuff2 AS (
    SELECT name
           ,startdate
           ,id
    FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10
;
SELECT *
FROM stuff2
WHERE id < 10

说。相反,您必须再次复制并粘贴整个 CTE 链。

关于sql - 我可以像我的示例一样在 TSQL 中使用WITH两次来过滤结果集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489026/

相关文章:

mysql - View 中的多列与 View 中的选择中的较少列是否会影响性能?

sql - SQL Server 中的 INSERT INTO SET 语法

sql - 如何使用 Between 子句过滤掉 2 个不同的日期时间字段

sql-server - CTE 到底如何发挥作用?

sql - 合并查询返回 ORA-30926 : unable to get a stable set of rows in the source tables

sql - 如何从ssis发生错误的点恢复数据迁移?

sql - 有没有办法从变量中选择数据库?

sql - sql中将多列合并为一列

sql - 从电子邮件地址获取用户名/帐户名

postgresql - 错误: missing FROM-clause entry for table "cte" while executing query in CTE