2

次のような順序の行を含む SQL の次のテーブルがあります。

RowId     OrderId     Type     Text
----------------------------------------
 1        1           5        "Sometext"
 2        1           5        "Sometext"
 3        2           4        "Sometext"
 4        3           5        "Sometext"
 5        2           4        "Sometext"
 6        1           3        "Sometext"

各オーダーは重複したタイプを持つことはできませんが、複数の異なるタイプを持つことはできます。

行 1 と 2 は Order 1の重複ですが、行 6 は問題ありません。

行 3 と 5 は Order 2の複製です。

重複したデータをすべて削除する必要があるため、この場合は行 2 と行 5を削除する必要があります。

データを削除するのに最適なクエリは何ですか? それとも、削除する重複を含むRowIDのリストを返すだけですか?

ありがとう。

4

3 に答える 3

1
;with cte as
(
Select Row_Number() Over(Partition BY ORDERID,TYPE ORDER BY RowId) as Rows,
RowId   ,  OrderId   ,  Type  ,   Text from TableName
)
Select RowId   ,  OrderId   ,  Type  ,   Text from cte where Rows>1

SQL フィドルのデモ

于 2013-11-12T06:05:51.360 に答える
1

してみてください:

with c as
(
  select *, row_number() over(partition by OrderId, Type order by (select 0)) as n
  from YourTable
)
delete from c
where n > 1;
于 2013-11-12T06:07:01.880 に答える