具有相同数据源的SQL多个合并语句(WITH as)

时间:2017-02-13 12:02:14

标签: sql sql-server tsql

我想在同一个查询中有多个合并语句(一个接一个) 但我不能使用相同的日期来源。例如:

WITH DATA as(
SELECT * FROM tables_or_joins
            )

MERGE table_name as Target
USING
(SELECT * FROM DATA JOIN another table
)
....
do something more; --and finish this statement here

-- start another merge here
MERGE table_name_2 as Target
USING(
SELECT * FROM DATA and join with another table
)
do something else

但输出为Invalid object name 'DATA'.在第二次合并中。有没有其他方式如何在两个合并中使用数据?希望这很清楚。

2 个答案:

答案 0 :(得分:0)

CTE仅适用于一个陈述

甚至无法在DATA

上进行两次简单选择

您可以拥有多个CTE但仍然只有一个实际声明

答案 1 :(得分:-1)

您可以使用多个CTE语句

  

WITH DATA as(SELECT * FROM tables_or_joins               ),DATA2 AS((SELECT * FROM DATA JOIN另一个表)

     

来自DATA d的SELECT *在d.id = d2.id

上加入DATA2 d2      

OR

     

从DATA union中选择*从DATA2中选择*