【问题标题】:Trying to find duplicates using CTE in SQL Server 2017尝试在 SQL Server 2017 中使用 CTE 查找重复项
【发布时间】:2018-09-23 03:48:38
【问题描述】:

我正在尝试修改我在下面找到的代码,以允许我找到可以删除 RowOrder > 1 行的重复项。我收到一条错误消息,指出最后一行的 ')' 附近的语法不正确。我不确定我做错了什么,请帮忙。提前致谢!

original source

WITH OrderedRows
AS
(
SELECT  ID, Carrier, ClaimDate, EmpID, ClaimNumber, LossNumber, TaskID, 
TaskType, TaskGroup, LetterDetails, Outlier, BeginTime, 
EndTime,TemplateUsed, Increment, ROW_NUMBER() OVER (PARTITION BY Carrier, 
ClaimDate, EmpID, ClaimNumber,LossNumber, TaskID, TaskType, TaskGroup, 
LetterDetails, Outlier, BeginTime, EndTime,TemplateUsed, Increment ORDER BY 
ID) as RowOrder
FROM    BillingStaging
)
DELETE FROM OrderedRows
WHERE RowOrder > 1 

【问题讨论】:

  • 看起来您可能从 CTE 中遗漏了 SELECT/DELETE/ETC... 的部分。在该声明的末尾粘贴SELECT * FROM OrderedRows;

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


【解决方案1】:

你刚刚定义了CTE但你没有使用它,你需要添加deletefrom语句

WITH OrderedRows
AS
(
     SELECT  ID, Carrier, ClaimDate, EmpID, ClaimNumber, LossNumber, TaskID, 
     TaskType, TaskGroup, LetterDetails, Outlier, BeginTime, 
     EndTime,TemplateUsed, Increment, 
     ROW_NUMBER() OVER (PARTITION BY Carrier, ClaimDate, EmpID,ClaimNumber,LossNumber, TaskID, TaskType, TaskGroup,LetterDetails, Outlier, BeginTime, EndTime,TemplateUsed, Increment ORDER BY ID) as RowOrder
 FROM    BillingStaging
)
DELETE FROM OrderedRows
WHERE RowOrder > 1 

【讨论】:

  • 我发布的部分出现错误。它不会出现在 delete 语句中。我没有包括那条线,但应该减少混淆。你能看出我的语法有什么问题吗?
  • 在 CTE 定义之前是否有 SQL 语句?如果是,则添加;在 WITH 之前。另一件事,您真的需要按这么多列进行分区吗?识别重复项?
  • 这最终将在存储过程中,但我试图首先在查询编辑器中获取正确的查询。我用一组小得多的列进行了尝试,但收到了同样的错误。我看到一些示例在 WITH CTE 之后的括号中包含一组列。我也试过了,但是没有用。我应该发布那组较小的列吗?我不确定缩进是否适用于 cmets。
  • 与缩进无关,在CTE定义前加分号即可。例如; WITH OrederedRows as (.....) 从 RowOrder > 1 的 OrderedRows 中删除。
【解决方案2】:

呃。弄清楚了。原来的答案是正确的。在使用DELETE 语句之前,我试图让语法正确,但是通过输入SELECT * FROM OrderedRows,它起作用了。谢谢您的帮助。我已经有一段时间没有这样做了。

成功了

WITH OrderedRows 
AS
(
SELECT
    ID, ClaimDate, EmpID, ClaimNumber, TaskType, BeginTime, EndTime, Increment,
    ROW_NUMBER() OVER (PARTITION BY ID, ClaimDate, EmpID, ClaimNumber, TaskType, BeginTime,
        EndTime, Increment ORDER BY ID) as RowOrder
FROM BillingStaging
)
SELECT * FROM OrderedRows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2023-03-31
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多