1

SQL Server 2008を使用して、2つのファイルをテーブルにインポートしました。最初のファイル(2048)には6,721行、2番目のファイルには(2209)4,707行があり、列は次のとおりBilled, FirstName, LastName, FileIDです。テーブルはと呼ばれClaimsます。

FileId各ファイルの重複を示すそれぞれ(2209および2048)を一覧表示し、そのうちの1つから重複を削除するクエリが必要です。

このクエリを実行しました:

SELECT firstname
, lastname
, duplicatecount = COUNT(1)
FROM Claims
WHERE fileid IN (2209, 2048)
GROUP BY
firstname
, lastname
HAVING COUNT(1) > 1
ORDER BY COUNT(1) DESC
4

3 に答える 3

0

これらは重複しています。したがって、クエリから始めます。

with todelete as (<your query here>)
delete from Claims
    from todelete
    where todelete.firstname = claims.firstname and
          todelete.lastname = claims.lastname and
          fileid = 2209

すべてではなく重複する値を削除する必要があるため、削除する値を指定する必要があります。私は勝手に2209を選びました。

于 2012-12-29T15:44:51.520 に答える
0

これにより、各ファイルの重複が得られます。

SELECT firstname , lastname , count(*) as duplicatecount 
FROM Claims WHERE fileid IN (2209, 2048) 
GROUP BY firstname , lastname HAVING COUNT(*) > 1 
ORDER BY 1,2 DESC

これを試して

于 2012-12-29T14:43:37.420 に答える
0

次のようなことを試すことができます:

WITH counted_and_marked AS (
  SELECT
    *
    rnk = ROW_NUMBER() OVER (PARTITION BY firstname, lastname ORDER BY fileid)
  FROM Claims
  WHERE fileid IN (2209, 2048)
)
DELETE FROM marked_and_counted
WHERE rnk > 1
;

共通テーブル式はmarked_and_counted、 からすべての行を取得し、 の順序でClaimsすべての重複を個別にランク付けします。次に、DELETE ステートメントは、ランキングが 1 より大きい行のみを削除します。(firstname, lastname)fileid

CTE は 1 つのテーブルのみを参照するため、DELETE は CTE を直接ターゲットにしていることがわかります。これはこの場合許可されています。

このクエリは、任意の数のファイルに対して機能します。すべての重複を削除し、 ごとに 1 つのエントリのみを残し(firstname, lastname)ます。

于 2012-12-29T15:19:23.503 に答える