0

Id(int)、Name(nvarchar)、Value1(bit)、Value2(bit) EX のフィールドを持つ MyTable というテーブルがあります。

1   Nathan  True    False
2   Nathan  True    False
3   John    True    False
4   John    False   True

したがって、次のように名前で重複を簡単に見つけることができます。

select 'First_Id'=a.Id,'First_Value1'=a.Value1,'First_Value2'=a.Value2, 
        'Second_Id'=b.Id,'Second_Value1'=b.Value1,'Second_Value2'=b.Value2
        from MyTable a, MyTable b where a.Id>b.Id
        and a.Name = b.Name

次に、SecondId の ID を持つものを削除できます...

私がやりたいことは、重複を見つけて、重複グループのすべての Value1 の間で論理 OR を実行し、その値で重複からすべての単一レコードを更新してから、value2 に対して同じことを行うことです。

元:

上記の例では、2 つのグループの重複があります。

結果は次のようになります。

1 Nathan True False
2 Nathan True False
3 John   True True
4 John   True True

どうやってやるの ?

4

2 に答える 2

1

これを試して :

update a set a.Value1=b.new_value1  ,a.Value2=b.new_value2

from MyTable a
inner join 
(select Name,cast(SUM(cast(Value1 as int))as bit) new_value1,
cast(SUM(cast(Value2 as int)) as bit) new_value2 from MyTable
group by Name) b

on a.Name=b.Name;

select * from MyTable

SQL フィドル

説明: では機能しないcast(Value1 as int)ため、必須です。次に、ゼロ以外の値を 1(true) に変換します。SUMbitcast(SUM(cast(Value1 as int))as bit)

参照

于 2013-05-07T08:28:28.160 に答える