3

複合グループ ID (つまり、GroupID = Col1 + Col2 + Col3) で構成される複数のグループのレコードを含む SQL Server 2008 テーブルがあり、これらの各グループをランダムにコントロール グループに分割し、Col1 のみの値を再割り当てする必要があります。各グループの 1 つは元のグループに残り、半分は新しいグループに配置されます。各 Col2 + Col3 グループを手動で処理する必要がないように、単一のステートメントでこれを行うにはどうすればよいですか?

言い換えれば、私はこのようなことをしたいと思います:

UPDATE dbo.DM_Main
SET PkgPt1 = 'CD2'
WHERE ID IN (
    SELECT TOP 50 PERCENT ID
    FROM dbo.DM_Main
    WHERE PkgPt1 = 'CD1'
    GROUP BY PkgPt2, PkgPt3 -- obviously this line won't work
    ORDER BY NEWID()
)
4

1 に答える 1

3

ここにアイデアがあります。各グループの行を列挙します。次に、偶数 (または奇数) のものをコントロール グループに入れます。更新可能な CTE を使用して、SQL Server でこれを行うことができます。

with toupdate as (
      select m.*,
             row_number() over (partition by PkgPt2, PkgPt3 order by newid()) as seqnum
      from DM_Main m
     )
update toupdate
    set PkgPt1 = (case when seqnum % 2 = 0 then 'CD2' else PkgPT1 end);
于 2013-09-17T19:57:39.310 に答える