使用公用表表达式时出现“语法错误”

问题描述 投票:0回答:3
WITH list_dedup (Company, duplicate_count) AS
(
     SELECT
         *,
         ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Email) AS 'RowNumber'
     FROM
         Travels
)

错误

消息 102,第 15 级,状态 1,第 7 行
')' 附近的语法不正确。

sql sql-server common-table-expression
3个回答
9
投票

您缺少公共表表达式的最终选择( CTE 的定义之后):

WITH list_dedup  (Company,duplicate_count) As
(
  select *,
         ROW_NUMBER() OVER (PARTITION BY Company ORDER by Email) As "RowNumber"
  From Travels
)
select *  
from list_dedup;

但这不会,因为 CTE 被定义为具有列(通过

WITH list_dedup  (Company,duplicate_count)
),但您在 CTE 内的选择返回至少三列(公司、电子邮件、行号)。您需要调整 CTE 的列定义,或者完全忽略它:

WITH list_dedup As
(
  select *,
         ROW_NUMBER() OVER (PARTITION BY Company ORDER by Email) As "RowNumber"
  From Travels
)
select *  
from list_dedup;

当定义列列表时,内部选择中的

As "RowNumber"
也没有意义,因为 CTE 定义定义了列名称。在 CTE 内部使用的任何别名在其外部都将不可见(如果
with .. (...) as
部分中指定了 CTE 列)。


4
投票

您刚刚设置您的 CTE - 现在您需要使用它!

WITH list_dedup (Company, duplicate_count) AS
(
     SELECT
         *,
         ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Email) AS 'RowNumber'
     FROM
         Travels
)
SELECT *
FROM list_dedup

0
投票
;WITH list_dedup (Company, duplicate_count) AS
(
     SELECT
         *,
         ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Email) AS 'RowNumber'
     FROM
         Travels
)

SELECT * FROM list_dedup
© www.soinside.com 2019 - 2024. All rights reserved.