web-dev-qa-db-ja.com

SQL Serverを使用してテーブル内の重複レコードを検索する

Eコマースサイトのトランザクションレベルデータを含むテーブルを検証し、正確なエラーを見つけます。

SQL Serverの50列のテーブルで重複するレコードを見つけてください。

私のデータは次のとおりだと仮定します:

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

以下のクエリを使用するとします。

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

私を返します

Sam  2
John 2

しかし、1列または2列を超える重複を見つけたくありません。データ内のすべての列の重複を見つけたい。結果を次のようにしたい:

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

select * from x
where rn > 1

select文を次のように置き換えることで重複を削除できます

delete x where rn > 1
65
SELECT OrderNo, shoppername, amountPayed, city, item, count(*) as cnt
FROM dbo.sales
GROUP BY OrderNo, shoppername, amountPayed, city, item
HAVING COUNT(*) > 1
41
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

すべてのフィールドをクエリに追加するだけで、それらを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

複数のレコードのリストを取得するには、次のコマンドを使用します

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

これを試して

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
1
Rgavendhran N

代わりにこれを試してください

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

重複する可能性があるため、最初に CHECKSUM 関数についてお読みください。

1
wqw

以下のメソッドを使用して出力を見つけることができます

 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