【问题标题】:To use multiple with statement by union all通过 union all 使用多个 with 语句
【发布时间】:2014-08-14 20:40:31
【问题描述】:
WITH L1 AS
(
   SELECT
)
SELECT A FROM L1

UNION ALL

SELECT A FROM TABLE

UNION ALL

WITH L2 AS
(
   SELECT
)
SELECT A FROM L2

UNION ALL

WITH L3 AS
(
   SELECT
)
SELECT A FROM L3

我收到一个错误

关键字“with”附近的语法不正确。如果此语句是公用表表达式或 xmlnamespaces 子句,则前面的语句必须以分号结束。"

请帮忙

【问题讨论】:

  • 您不需要 WITH AS 子句。

标签: sql sql-server


【解决方案1】:

您不能在查询表达式的中间中使用WITH。 WITH 用于构建中间查询,供其他查询使用(意味着它不能被多个独立查询使用)。

所以你可能想要这样的东西:

WITH L1 
AS
(
    SELECT ...
),
L2 AS
(
    SELECT ...
),
L3 AS
(
    SELECT ...
)

// begin final query    
SELECT A FROM L1
UNION ALL
SELECT A FROM TABLE
UNION ALL
SELECT A FROM L2
UNION ALL
SELECT A FROM L3

【讨论】:

    【解决方案2】:

    语法是

    With l1 ( a ) as ( Select ... )
       , l2 ( a ) as ( ... )
      Select ... From ...
      Union
      Select ... From ...
    

    【讨论】:

      【解决方案3】:

      两种方法:

      SELECT A FROM L1
      UNION ALL
      SELECT A FROM L2
      UNION ALL
      SELECT A FROM L3
      

      或

      WITH CTE_L AS
      (
          SELECT A FROM L1
          UNION ALL
          SELECT A FROM L2
          UNION ALL
          SELECT A FROM L3
      )
      SELECT * FROM CTE_L
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 2019-03-07
        相关资源
        最近更新 更多