请不要将此问题标记为CTE within a CTE的重复。我检查了问题和答案..。但是这个答案并不能满足我的需求。
我想运行嵌套CTE查询,如下所示
Drop Table #Temp
Create Table #Temp(name1 text, name2 text)
Insert INTO #Temp Values ('test','test')
Insert INTO #Temp Values ('test','test')
;WITH CTE1 AS (
With CTE2 as ( Select * from #Temp)
)
Select * from CTE1或
;WITH CTE1 AS (
Select * From (With CTE2 as ( Select * from #Temp))
)
Select * from CTE1在我们的结构中。内部CTE2查询已由其他系统提供。所以我不能控制查询的内部...所以..。这里我的职责只是从内部查询中选择值,并在我的系统中形成新的CTE…
请想象一下这一点
;WITH CTE1 AS (
"Query Provide by Other System"
)在某些情况下,以CTE..this开头的“由其他系统提供的查询”可能是也可能不是CTE查询……这就是问题所在,因为我不能像下面这样使用
;WITH CTE1 AS (
Select * From
)
,With CTE2 as
( Select * from #Temp))请帮助任何人实现这一点,我想我的需求太动态了。
发布于 2014-04-10 21:40:35
我有个想法:
;WITH cte1 AS
(
SELECT * FROM ...
),
cte2 as
(
SELECT * FROM ...
),
cte3 as
(
SELECT * FROM ... INNER JOIN cte2 ON...
),
SELECT *
FROM
cte1
INNER JOIN cte3 ON ...发布于 2014-04-10 21:41:30
使用,分隔CTE,而不是嵌套它们。
;
WITH
CTE2 AS
(
SELECT * FROM #Temp
)
,
CTE1 AS
(
SELECT * FROM CTE2
)
SELECT
*
FROM
CTE1编辑:关注您的其他评论
据我所知,向您提供了一个系统生成的查询,然后您希望将其嵌入到另一个查询中。系统生成的查询有时使用CTE,有时不使用;您事先不知道该查询的格式。
不幸的是,对你来说,这意味着你的不能嵌入到另一个CTE中。
一种选择是使用真实的视图。
CREATE VIEW xxx AS
<system generated code here>
;
SELECT
*
FROM
xxx
;但是,您必须非常小心并发;两个并发用户试图创建具有相同名称的相同视图。
更好的解决方案是与系统供应商接触,创建系统生成的查询,并询问他们建议您如何使用它。
发布于 2014-04-10 21:44:30
;with BASE AS (
SELECT * FROM table1
), BASE2 AS (
SELECT * from table2
), BASE3 AS (
SELECT * FROM table3
) SELECT * FROM BASE INNER JOIN BASE3 ...我猜这就是你想要做的。
https://stackoverflow.com/questions/22989597
复制相似问题