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
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
SELECT OrderNo, shoppername, amountPayed, city, item, count(*) as cnt
FROM dbo.sales
GROUP BY OrderNo, shoppername, amountPayed, city, item
HAVING COUNT(*) > 1
SQL> SELECT JOB,COUNT(JOB) FROM EMP GROUP BY JOB;
JOB COUNT(JOB)
--------- ----------
ANALYST 2
CLERK 4
MANAGER 3
PRESIDENT 1
SALESMAN 4
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
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
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.
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
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
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