web-dev-qa-db-fra.com

Rechercher des enregistrements en double dans une table à l'aide de SQL Server

Je valide une table contenant les données de transaction d'un site de commerce électronique et trouve les erreurs exactes.

Je veux votre aide pour trouver des enregistrements en double dans une table de 50 colonnes sur SQL Server.

Supposons que mes données sont:

OrderNo shoppername amountpayed city Item       
1       Sam         10          A    Iphone
1       Sam         10          A    Iphone--->>Duplication to be detected
1       Sam         5           A    iPod
2       John        20          B    Macbook
3       John        25          B    Macbookair
4       Jack        5           A    iPod

Supposons que j'utilise la requête ci-dessous:

Select shoppername,count(*) as cnt
from dbo.sales
having count(*) > 1
group by shoppername

me rendra 

Sam  2
John 2

Mais je ne veux pas trouver en double un peu plus de 1 ou 2 colonnes. Je veux trouver le doublon sur toutes les colonnes ensemble dans mes données. Je veux le résultat en tant que:

1       Sam         10          A    Iphone
38
Sahil
with x as   (select  *,rn = row_number()
            over(PARTITION BY OrderNo,item  order by OrderNo)
            from    #temp1)

select * from x
where rn > 1

vous pouvez supprimer les doublons en remplaçant l'instruction select par 

delete x where rn > 1
62
Sathya Narayanan
SELECT OrderNo, shoppername, amountPayed, city, item, count(*) as cnt
FROM dbo.sales
GROUP BY OrderNo, shoppername, amountPayed, city, item
HAVING COUNT(*) > 1
39
Eugene
SQL> SELECT JOB,COUNT(JOB) FROM EMP GROUP BY JOB;

JOB       COUNT(JOB)
--------- ----------
ANALYST            2
CLERK              4
MANAGER            3
PRESIDENT          1
SALESMAN           4
4
MUEKSH KUMAR

Ajoutez simplement tous les champs à la requête et n'oubliez pas de les ajouter à Group By.

Select shoppername, a, b, amountpayed, item, count(*) as cnt
from dbo.sales
group by shoppername, a, b, amountpayed, item
having count(*) > 1
3
GolezTrol

Pour obtenir la liste de plusieurs enregistrements, utilisez la commande suivante

select field1,field2,field3, count(*)
  from table_name
  group by field1,field2,field3
  having count(*) > 1
3
Abhinav Singh

Essayez ceci à la place

SELECT MAX(shoppername), COUNT(*) AS cnt
FROM dbo.sales
GROUP BY CHECKSUM(*)
HAVING COUNT(*) > 1

Lisez tout d’abord sur la fonction CHECKSUM , car il peut y avoir des doublons.

1
wqw

Vous pouvez utiliser les méthodes ci-dessous pour trouver le résultat

 with Ctec AS
 (
select *,Row_number() over(partition by name order by Name)Rnk
 from Table_A
)
select  Name from ctec
where rnk>1

select name from Table_A
 group by name
 having count(*)>1
0
sampath acharya
with x as (
select shoppername,count(shoppername)
              from sales
              having count(shoppername)>1
            group by shoppername)
select t.* from x,win_gp_pin1510 t
where x.shoppername=t.shoppername
order by t.shoppername
0
user5758159

Essaye ça

with T1 AS
(
SELECT LASTNAME, COUNT(1) AS 'COUNT' FROM Employees GROUP BY LastName HAVING  COUNT(1) > 1
)
SELECT E.*,T1.[COUNT] FROM Employees E INNER JOIN T1 ON T1.LastName = E.LastName
0
Rgavendhran N