繁体   English   中英

使用公用表表达式时的“语法不正确”

[英]“Incorrect syntax” when using a common table expression

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

错误

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

您缺少公用表表达式的最终选择( 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列)。

您刚刚设置了 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

; WITH list_dedup(公司,重复计数)AS(SELECT *,ROW_NUMBER()OVER(按公司ORDER BY电子邮件的拼写)AS'RowNumber'from Travels)

选择* FROM list_dedup

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM