この記事では、プロセスについて説明します。 SQLテーブルから重複行に対してSQL削除アクティビティを実行する方法。
はじめに
SQL Serverでオブジェクトを設計するときは、特定のベストプラクティスに従う必要があります。たとえば、テーブルには、主キー、ID列、クラスター化インデックスと非クラスター化インデックス、データの整合性とパフォーマンスを確保するための制約が必要です。ベストプラクティスに従っても、行の重複などの問題が発生する可能性があります。データインポートの中間テーブルでこれらのデータを取得する場合もあり、実際に本番テーブルに挿入する前に重複行を削除する必要があります。
SQLテーブルに重複行が含まれていて、それらの重複行を削除するとします。 。多くの場合、私たちはこれらの問題に直面しています。重複する行がすでにテーブルにある場合は、関連するキー、制約を使用して重複行の可能性を排除することもベストプラクティスです。重複データをクリーンアップするには、特定の方法に従う必要があります。この記事では、SQLテーブルから重複データを削除するさまざまな方法について説明します。
サンプルのEmployeeテーブルを作成し、そこにいくつかのレコードを挿入しましょう。
テーブルには、重複するレコードはほとんどないため、削除する必要があります。
SQLは、GroupByを使用して重複する行を削除します
このメソッドでは、SQL GROUPBY句を使用して重複を識別します行。 Group By句は、定義された列に従ってデータをグループ化し、COUNT関数を使用して行の出現を確認できます。
たとえば、次のクエリを実行すると、出現回数がより大きいレコードが取得されます。 Employeeテーブルに1。
上記の出力には、ID1と3の2つの重複レコードがあります。
- Emp ID1はEmployeeテーブルに2回出現します
- Emp ID3はEmployeeテーブルに3回出現します
保持する必要があります単一の行を削除し、重複する行を削除します。テーブルから重複する行のみを削除する必要があります。たとえば、EmpID1はテーブルに2回表示されます。 1回だけ削除します。
SQL MAX関数を使用して、各データ行の最大IDを計算します。
次のスクリーンショットでは、上記のSelectステートメントは重複する各行の最大IDを除外し、最小ID値のみを取得します。
このデータを削除するには、最初に、次のクエリに従ってSQL削除ステートメントで選択します。
deleteステートメントを実行したら、Employeeテーブルでselectを実行すると、重複する行を含まない次のレコードが取得されます。
SQLは共通テーブル式(CTE)を使用して重複行を削除します
一般にCTEと呼ばれる共通テーブル式を使用して、SQLServerの重複行を削除できます。 SQL Server2005以降で使用できます。
SQL ROW_NUMBER関数を使用し、行に一意の連続行番号を追加します。
次のCTEでは、 、および列にPARTITION BY句を使用してデータを作成し、各行の行番号を生成します。
出力で、いずれかの行の列の値が1より大きい場合、重複していることを示します。行。
次のCTEを使用して重複する行を削除できます。
行を削除します値が1より大きい場合
重複行をSQLで削除するRANK関数
SQL RANK関数を使用して、重複行を削除することもできます。 SQL RANK関数は、重複する行に関係なく、各行に一意の行IDを提供します。
次のクエリでは、PARTITIONBY句を指定したRANK関数を使用します。 PARTITION BY句は、指定された列のデータのサブセットを準備し、そのパーティションのランクを指定します。
スクリーンショットでは、ランクが1より大きい行を削除する必要があることに注意してください。次のクエリを使用してこれらの行を削除しましょう。
SSISパッケージを使用して重複行をSQLで削除します
SQL Server統合サービスは、管理者と開発者の両方が手作業を削減するのに役立つさまざまな変換演算子を提供しますタスクを最適化します。 SSISパッケージはSQLテーブルから重複する行も削除できます。
重複する行を削除するにはSSISパッケージで並べ替え演算子を使用します
並べ替え演算子を使用して、の値を並べ替えることができます。 SQLテーブル。データの並べ替えで重複する行を削除する方法を尋ねられるかもしれませんか?
このタスクを表示するSSISパッケージを作成しましょう。
- SQL Serverデータツールで、新しい統合パッケージを作成します。新しいパッケージで、OLEDBソース接続を追加します
-
OLE DBソースエディターを開き、ソース接続を構成して、宛先テーブルを選択します
-
[データのプレビュー]をクリックすると、ソーステーブルにデータが重複していることがわかります
-
SQL削除操作用のSSISツールボックスから並べ替え演算子を追加し、ソースデータと結合します
並べ替え演算子の構成については、それをダブルクリックして、重複する値を含む列を選択します。この場合、重複する値は、、列にあります。
列に昇順または降順の並べ替えタイプを使用することもできます。デフォルトのソート方法は昇順です。並べ替え順序では、列の並べ替え順序を選択できます。並べ替え順序1は、最初に並べ替えられる列を示しています。
左下にある、[行を削除する]チェックボックスがあります。重複するソート値。
ソースデータから重複する行を削除するタスクを実行します。このチェックボックスにチェックを入れて、[OK]をクリックしましょう。 SSISパッケージでSQL削除アクティビティを実行します。
[OK]をクリックすると、[データフロー]タブに戻ります。次のSSISパッケージが表示されます。
重複する行を削除した後、データを格納するSQLServerの宛先を追加できます。ソート演算子がタスクを実行しているかどうかを確認するだけです。
以下に示すように、SSISツールボックスからSQLマルチキャスト変換を追加します。
個別のデータを表示するには、SortとMulticastの間のコネクタを右クリックします。 [データビューアを有効にする]をクリックします。
SSISパッケージ全体は次のようになります。
パッケージを実行して、SQL削除操作を実行します。データフロータスクで出力データの並べ替えビューアを開きます。このデータビューアでは、重複する値を削除した後、個別のデータを表示できます。
これを閉じると、SSISパッケージが正常に表示されます実行されました。
結論
この記事では、SQLを使用して重複行を削除するプロセスについて説明しました。 T-SQL、CTE、SSISパッケージなどのさまざまな方法。快適な方法でご利用いただけます。ただし、これらの手順とパッケージを本番データに直接実装しないことをお勧めします。より低い環境でテストする必要があります。
- 作成者
- 最近の投稿
彼は、SQL Server Always On可用性グループに関する50部構成のシリーズで、単一のトピックに関する記事の最大の無料オンラインコレクションの1つを作成しています。 SQL Serverコミュニティへの貢献に基づいて、彼はSQLShackで2020年と2021年に継続的に名誉ある「年間最優秀著者」を含むさまざまな賞を受賞しています。
Rajは常に新しい課題に関心を持っているため、コンサルティングが必要な場合は彼の著作で取り上げられている主題についてのヘルプは、rajendra.gupta16 @ gmail.comに連絡できます。
RajendraGuptaによる投稿をすべて表示
- AWSのマイナーバージョンとメジャーバージョンのアップグレードの実行RDS SQLServer- 2021年1月29日
- AWS RDSPostgreSQLインスタンスのデプロイ-2021年1月27日
- AWSDMSを使用したオンプレミスSQLデータベースのAWSRDS SQLServerへの移行-1月25日、2021