0

可能であれば、単一の更新ステートメントを探しています。

検討:

rsvpgroup   |   personid | isVip | firstname | lastname |   type
------------------------------------------------------------------
1                100         1       bob         smith     leader
1                101         0       john        doe       guest
1                102         0       sara        jones     guest
2                200         0       tom         ohara     leader
2                201         0       jane        doe       guest

isVIP「リーダー」がVip = 1の場合、rsvpグループのゲストを更新する必要があります

したがって、このシナリオでは、上記の行 2 と 3 が 0 から 1 に更新されます。行 4 と 5 は変更されません。

4

2 に答える 2

0

ウィンドウ関数と CTE を使用したアプローチを次に示します。

with toupdate as (
      select t.*,
             max(case when [type] = 'leader' then IsVIP end) over
                      (partition by RSVPgroup) as LeaderIsVIP
      from t
     )
update toupdate
    set IsVIP = LeaderIsVIP
    where IsVIP <> LeaderIsVIP;
于 2013-05-11T16:06:24.183 に答える