gpt4 book ai didi

sql - 如何在单个 SQL Server 查询中选择多个组的一半?

转载 作者:行者123 更新时间:2023-12-02 00:05:04 24 4
gpt4 key购买 nike

我有一个 SQL Server 2008 表,其中包含多个组的记录,这些组由复合组 ID(即 GroupID = Col1 + Col2 + Col3)组成,需要将这些组中的每一个随机拆分为控制组,仅重新分配 Col1 的值,这样每个组的一半将留在原来的组中,另一半将被分配到一个新组中。我怎样才能在一条语句中执行此操作,而不必手动遍历每个 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()
)

最佳答案

这是一个想法。枚举每组的行。然后将偶数(或奇数)的放入对照组。您可以使用可更新的 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);

关于sql - 如何在单个 SQL Server 查询中选择多个组的一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com