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

SQLテーブルから(複数の列の値に基づいて)重複する行を削除する

    サンプルSQLフィドル

    1)CTEを使用して、各顧客のARDivisionNo、CustomerNoに基づいて最大出荷コード値レコードを取得します

    WITH cte AS (
      SELECT*, 
         row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
      FROM t
    )
    Select * from cte WHERE [rn] = 1
    

    2)レコードを削除するには、Selectの代わりにDeleteクエリを使用して、Where句をrn>1に変更します。サンプルSQLFIDDLE

    WITH cte AS (
      SELECT*, 
         row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
      FROM t
    )
    Delete from cte WHERE [rn] > 1;
    
    select * from t;
    


    1. MySQL-GroupByにない列を選択する

    2. 一日の終わりを取得する方法は?

    3. PostgreSQL用のトップPGクラスタリング高可用性ソリューション

    4. AccessでSQLServerを使用する必要があるのはいつですか。 (ヒント:ほとんどの場合)