sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008:重複する行を削除する

    DELETEできます cte から:

    WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
                 FROM Table)
    DELETE FROM cte 
    WHERE RowRank > 1
      

    ROW_NUMBER() 関数は各行に番号を割り当てます。 PARTITION BY そのグループ内の各項目の番号付けをやり直すために使用されます。この場合、uniqueid の各値 番号は 1 から始まり、そこから上がります。 ORDER BY 数字が入る順序を決定します。各 uniqueid から ROW_NUMBER() を持つすべてのレコードに 1 から番号が付けられます 1 より大きい場合、uniqueid が重複しています

    ROW_NUMBER() の仕組みを理解するには 関数は機能します。試してみてください:

    SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
    FROM Table
    ORDER BY uniqueid
      

    ROW_NUMBER() のロジックを調整できます 保持または削除するレコードを調整する機能。

    たとえば、これを複数のステップで実行したい場合、最初に姓が同じで名が異なるレコードを削除し、PARTITION BY に姓を追加できます。 :

    WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
                 FROM Table)
    DELETE FROM cte 
    WHERE RowRank > 1
      

    1. テーブルからデータ行を削除した後、MySQLInnoDBがディスクスペースを解放しない

    2. SQLの文字列のあいまい一致

    3. Laravel +Vagrant=ユーザー'root'@'localhost'のアクセスが拒否されました

    4. Datagridviewでフォーマットを使用してデータを表示する