0

私はこれをグーグルで検索しようとしましたが、自分自身を説明する必要なしにそれを書く方法がわかりませんでした.

基本的に、いくつかの検証を実行しているデータ セットがあり、作業中のデータベースのユーザーから重複したデータ インポートを探しています。

これは、ユーザーが建物情報をデータベースにインポートしているためです。場合によっては、(たとえば) 名前が間違っているため、インポート ファイルを修正し、データを再アップロードしました。

問題は、既存の建物を置き換えるのではなく、輸入業者が (当然のことながら) 新しい建物の記録を作成することです。そのため、古いレコードを削除できるように、重複している建物のレコードを返す方法が必要です。

明らかにこれは完璧ではありませんが、共通のフィールド (建物のサイズ、場所) を使用して重複を見つけようとしています。これらのフィールドは同じであるためです。変更されたのは名前だけです。したがって、テーブルを以下のようにレイアウトする場合、重複する行をどのように分離しますか? (imgurリンクで申し訳ありません。ここでテキストを表のような形式にフォーマットする方法がわかりません。表は非常に単純化されています)

http://imgur.com/cOpXZAr

したがって、LocationID 1 と 4 の建物は 1 回しかインポートされていませんが、LocationId 2 のインポートは 2 回実行され、LocationID 3 のインポートは 3 回実行されていることがわかります。これらのレコードを見つける必要があります。

一連の列が重複している行を分離するために使用できるものがあるかどうかを知りたいだけです-誰か助けてくれますか?

4

2 に答える 2

0

SQL Server で自動インクリメントする (つまり、識別シードを設定する) プライマリ キーがあると仮定すると、次のクエリを記述して、同じ建物、サイズ、場所を持つ複数のレコードがあるデータベース内の最も古いレコードを識別することができます。データ:

SELECT building, size, location, MIN(ID)
FROM LoadedTableData
GROUP BY building size, location
HAVING COUNT(*) > 1

同様に、次のようにこれらの行を削除できます。

DELETE FROM LoadedTableData
WHERE ID IN (
  SELECT MIN(ID) as MIN_ID
  FROM LoadedTableData
  GROUP BY building size, location
  HAVING COUNT(*) > 1
)
于 2013-10-01T15:37:52.707 に答える