0

私は2つのことをする方法を理解しようとしています:

  1. テーブル内の重複レコードを見つけます。

これらは通常、「名前」列の重複した名前ですが、具体的には、ParentIDが同じ名前です。これらの名前(またはChildren)は異なる親に属しているため、ParentIDが異なる同じ名前を持っていても問題ありません。

  1. これらの重複を変更します。

できれば、名前に「ID」を追加して、これらの重複を変更します。

重複を見つけるためのクエリを思いついたので、それらを一時テーブルにダンプします。

CREATE TABLE #Dup(
Name varchar(50),
CustNo varchar(7))

insert into #Dup (Name, CustNo)
SELECT [Name],[CustNo]

FROM [02Kids]
GROUP BY [Name], [CustNo]
HAVING Count(*)>1

これはうまくいくようです。テーブルのデータを表示すると、名前が表示され、ParentIDがそれを識別していることがわかります。これは、その親IDに対して2回表示される名前です。名前がテーブルに1回だけ表示されることは注目に値します。同じ名前とIDの2つの行が表示されません(おそらくこれは私の問題の一部です)。

これが私が修正を実行しようとして思いついたクエリです:

select[#Dup].[Name] + '  ' + [02Kids].[ID] as iName, [02Kids].ParentID 
from #Dup
inner join [02Kids]
on #Dup.CustNo = [02Kids].ParentID 
order by iName asc

まあ、私が大量の重複で終わることを除いて、この種の作品。たとえば、2つの重複しかないことを確認できる1つの「名前」は、その選択クエリから合計で13に近くなります。

私はそのクエリ(これは私が自分自身を教えるために使用している練習用のものです)でここから離れているかもしれませんが、これを行うための正しい手段を考えるのに苦労しています。私はまだ構文、キーワード、関数などを学んでいるので、まだ知らないものを使用する必要があるかもしれません。

4

2 に答える 2

1

「変更」クエリで必要な一致のみを取得するには、名前の一致を結合句に追加する必要があります。現在、重複レコードだけでなく、その親のすべての子供と重複レコードを照合しています。したがって、1人の親に13人の子供がいて、そのうちの1人だけが重複している場合、13個の追加レコードを取得します。

inner join [02Kids]
on #Dup.CustNo = [02Kids].ParentID AND
#Dup.Name = [02Kids].Name
于 2013-01-11T15:48:32.493 に答える
0

これはあなたの質問に答えますか?

USE tempdb
GO

CREATE TABLE Person (PersonID INT, FName VARCHAR(25), LName VARCHAR(25))
INSERT INTO Person VALUES
(1, 'Jim', 'Jones'),
(2, 'Rob', 'Smith'),
(3, 'Matt', 'Bridges'),
(4, 'Jim', 'Jones'),
(5, 'Jim', 'Jones'),
(6, 'Alex', 'Door'),
(7, 'Wilhelm', 'Kay')
GO

;WITH DupDetect AS
(
    SELECT *
            ,Occ = ROW_NUMBER() OVER (PARTITION BY FName, LName ORDER BY PersonID)
    FROM Person
)
UPDATE DupDetect
SET FName = LTRIM(STR(PersonID)) + FName
WHERE Occ > 1

SELECT *
FROM Person

その結果;

PersonID |  FName   |   LName
---------------------------------
1        |  Jim     |   Jones
2        |  Rob     |   Smith
3        |  Matt    |   Bridges
4        |  4Jim    |   Jones
5        |  5Jim    |   Jones
6        |  Alex    |   Door
7        |  Wilhelm |   Kay

重複を変更または削除するための、よりクリーンで効率的なパターンを知りません。

于 2013-01-11T15:51:43.027 に答える