Duplicate in same row in different columns

与世无争的帅哥 提交于 2020-01-14 05:26:09

问题


i have a table like this:

CREATE TABLE #my_table (
  intID int IDENTITY (1, 1),
  num_1 varchar(100) NOT NULL,
  num_2 varchar(100) NOT NULL,
  num_3 varchar(100) NOT NULL,
  num_4 varchar(100),
  num_5 varchar(100),
  isDuplicate char(1) DEFAULT 'N'
)

INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'c', 'd', 'e')
INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'c', 'd', 'e')
INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'c', 'd', 'e')
INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'a', 'd', 'e')
INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'a', 'd', 'e')
INSERT INTO #my_table (num_1, num_2, num_3, num_4, num_5)
  VALUES ('a', 'b', 'c', 'd', 'c')

I need to find duplicates in columns and get the row number which is duplicate.

my result should be duplicate rows last 3 rows and is duplicate flag should be updated to 'Y'


回答1:


This could also do the trick:

UPDATE #my_table
    SET isDuplicate = 'Y'
WHERE intID IN (
    SELECT intID FROM #my_table
    WHERE EXISTS 
       (SELECT 1 
        FROM (VALUES 
                   (num_1)
                  ,(num_2)
                  ,(num_3)
                  ,(num_4)
                  ,(num_5)) AS X (n)
        WHERE NULLIF(n, '') IS NOT NULL
        GROUP BY n
    HAVING COUNT(*)>1
   )
)

More information about table value constructors you can find here.




回答2:


This should do the trick :

select  num_1, num_2, num_3, count(*)
from #my_table
group by num_1, num_2, num_3
having count(*) > 1

Regards




回答3:


This would set the duplicate column in the table to 'Y' if its a duplicate, you can the query from that

UPDATE #my_table
SET isDuplicate = 'Y'
WHERE intID IN
(
    SELECT intID
    FROM
    (
        SELECT intID, num_1, num_2, num_3,num_4, num_5,
               RANK() OVER(PARTITION BY num_1, num_2, num_3, num_4, num_5 ORDER BY intID ASC) AS [rank]
        FROM #my_table
    ) a
    WHERE [rank] > 1
);



回答4:


Try this:

UPDATE #my_table
SET isDuplicate = 
CASE
    WHEN
    (select count(*) 
    from #my_table t2
    where t2.intID <> #my_table.intID
    and t2.num_1 = #my_table.num_1
    and t2.num_2 = #my_table.num_2
    and t2.num_3 = #my_table.num_3
    and t2.num_4 = #my_table.num_4
    and t2.num_5 = #my_table.num_5
 ) > 0 then 'Y'
 ELSE 'N'
 END


来源:https://stackoverflow.com/questions/47200878/duplicate-in-same-row-in-different-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!