我在表格中有这些信息:
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
我想识别具有相同值和日期信息的所有行,如下所示:
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”行标识为重复记录。我的问题:
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
但我有这个:
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
有什么想法吗?
答案 0 :(得分:1)
这不仅可以识别重复的记录,还可以识别它们是哪些记录。
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
<强>返回强>
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 :(得分:0)
感谢@ john-cappelletti,我找到了一个基于jhon答案的解决方案:
$SqlServer