首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server标识所有重复行

SQL Server标识所有重复行
EN

Stack Overflow用户
提问于 2016-10-10 22:19:35
回答 2查看 36关注 0票数 2

我在一个表格里有这样的信息:

代码语言:javascript
复制
id  Value   Date        Amount
------------------------------
1   79111   2016-10-10  700.00
2   79111   2016-10-10  800.00
3   79111   2016-10-12  900.00
4   79111   2016-10-10  500.00
5   79111   2016-10-27  100.00

我想标识所有具有相同Date信息的行,如下所示:

代码语言:javascript
复制
id  Value   Date        Amount  Alert
----------------------------------------
1   79111   2016-10-10  700.00  duplicate
2   79111   2016-10-10  800.00  duplicate
3   79111   2016-10-12  900.00  NULL
4   79111   2016-10-10  500.00  duplicate
5   79111   2016-10-27  100.00  NULL

我已经识别了"X“行的重复行.但我也需要将"X“行识别为重复记录。我的问题是:

代码语言:javascript
复制
WITH CTE AS
(
SELECT *,RN=ROW_NUMBER() OVER (PARTITION BY Value_my, Date_my ORDER BY id DESC) FROM myTable
)
select *
from CTE A
where A.RN>1 Or A.RN = 1

但我有一个:

代码语言:javascript
复制
id  Value   Date        Amount  Alert
----------------------------------------
1   79111   2016-10-10  700.00  NULL ***How identify this row?***
2   79111   2016-10-10  800.00  duplicate
3   79111   2016-10-12  900.00  NULL
4   79111   2016-10-10  500.00  duplicate
5   79111   2016-10-27  100.00  NULL

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-10 22:26:26

这不仅可以识别重复的记录,还可以识别哪些记录是被欺骗的。

代码语言:javascript
复制
Declare @Yourtable table (ID int,value int,Date date,Amount money) 
Insert into @Yourtable values 
(1,79111,'2016-10-10',700.00),
(2,79111,'2016-10-10',800.00),
(3,79111,'2016-10-12',900.00),
(4,79111,'2016-10-10',500.00),
(5,79111,'2016-10-27',100.00)

Select A.*
      ,Alert = case when B.DuplicateOf is null then Null else 'Alert' end
      ,B.DuplicateOf 
 From  @YourTable A
 Cross Apply (Select DuplicateOf = Stuff((Select Distinct ',' + cast(id as varchar(25)) 
                              From @YourTable 
                              Where id<>A.id
                                and value=A.value
                                and date =A.date
                                For XML Path ('')),1,1,'')
              ) B
 --Where Dupes is not null

返回

代码语言:javascript
复制
ID  value   Date        Amount  Alert   DuplicateOf
1   79111   2016-10-10  700.00  Alert   2,4
2   79111   2016-10-10  800.00  Alert   1,4
3   79111   2016-10-12  900.00  NULL    NULL
4   79111   2016-10-10  500.00  Alert   1,2
5   79111   2016-10-27  100.00  NULL    NULL
票数 1
EN

Stack Overflow用户

发布于 2016-10-11 13:48:31

多亏了@john-cappelletti,我找到了一个基于john的答案的解决方案:

代码语言:javascript
复制
select  a.*,
        case when b.DuplicateOf is null then 0 else 1 end 'Duplicity'
from    myTable a
outer apply (
    Select top 1 id 'DuplicateOf'
    from myTable
    where id <> a.id
    and Value_my = a.Value_my
    and Date_my = a.Date_my
)b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39967618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档