【问题标题】:How to join multiple CTE's into a temp table如何将多个 CTE 加入临时表
【发布时间】:2018-01-17 20:50:23
【问题描述】:

我得到了一个清理脚本,它使用了大约 85 个临时表,建议我使用通用表表达式。

我有 3 个 CTE,第一个是使用 Union all 将 7 个表放在一起的结果。其次是另外 2 个 CTE。脚本运行到:

select * from CTE_1
Union all 
select * from CTE_2
Union all
select * from CTE_3

然后我想将所有这些结果放入一个可重用的表中,这样我就可以添加一些带有各种 case 语句逻辑的连接。我怎样才能把这些放到一个临时表中,以便我以后可以引用它。

我希望减少临时表的数量,因此我最好将多个 CTE 放入一个临时表中,而不是将每个 CTE 放入一个临时表中。我目前有:

; with [CTE One] as (
  select 1 as col
),
  [CTE Two]  as (
  select 2 as col
),
  [CTE Three]  as (
  select 3 as col
)
select * from CTE_1
Union all 
select * from CTE_2
Union all
select * from CTE_3

【问题讨论】:

  • 如果 ctes 可以联合起来,也许你完全跳过 cte 而只是将查询联合在一起。我不得不说,如果你有一个包含 85 个临时表的脚本,那么仅仅将它迁移到 ctes 并不会做太多事情。任何涉及的逻辑都需要认真重新考虑。
  • 您的具体问题是什么?

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


【解决方案1】:

你不能只使用into吗?

select *
into #temptable
from CTE_1
Union all 
select * from CTE_2
Union all
select * from CTE_3;

如果代码结构合理,我也可能倾向于使用表变量。

【讨论】:

    【解决方案2】:

    或者..

        IF ( OBJECT_ID('tempdb..#temptable') IS NOT NULL )
            BEGIN
                DROP TABLE #temptable
            END
    
        CREATE TABLE #temptable
        (
            val int
        )
    
    
    
       ;
        WITH    [CTE One]
                  AS ( SELECT   1 AS col
                     ),
                [CTE Two]
                  AS ( SELECT   2 AS col
                     ),
                [CTE Three]
                  AS ( SELECT   3 AS col
                     )
            INSERT  INTO #temptable (val)
                    SELECT  *
                    FROM    ( SELECT    *
                              FROM      CTE_1
                              UNION ALL
                              SELECT    *
                              FROM      CTE_2
                              UNION ALL
                              SELECT    *
                              FROM      CTE_3
                            ) T
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2014-06-03
      • 2021-03-24
      • 2012-05-24
      • 2015-05-03
      • 1970-01-01
      • 2015-02-10
      • 2015-11-09
      相关资源
      最近更新 更多