我有一列数据我需要并行复制X次,随机化。随机化是为了进行调查,其中列表是无偏见的选择混乱,手动完成需要相当长的时间。
我是SQL的新手,所以请耐心等待。由于我的知识有限,我认为查询应该如何工作。
SELECT MAKEMODEL, (SELECT MAKEMODEL FROM BWMM ORDER BY NEWID())
FROM BWMM
ORDER BY NEWID()
基本上这会给我这样的东西
A E
B D
C B
D A
E C
你明白了。我感谢您给我的任何反馈或指示。
PS:从概念上讲,它很像关于类似问题的VBA解决方案的帖子Randomize Columns答案 0 :(得分:0)
我将首先展示我的测试数据:
create table BWMM
(
makemodel char(1)
)
insert into BWMM(makemodel)
select 'A' union
select 'B' union
select 'C' union
select 'D' union
select 'E'
以下内容应该为您提供一行中随机选择的前n行(在本例中为n = 5)的唯一列中的数据:
;with cte as (
select *,
[row] = row_number() over(order by newID())
from BWMM
)
select min(case when row=1 then makemodel else null end),
min(case when row=2 then makemodel else null end),
min(case when row=3 then makemodel else null end),
min(case when row=4 then makemodel else null end),
min(case when row=5 then makemodel else null end)
from cte
答案 1 :(得分:0)
WITH
set_a
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS rand_id, * FROM BWWM
)
,
set_b
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS rand_id, * FROM BWWM
)
SELECT
*
FROM
set_a
INNER JOIN
set_b
ON set_a.rand_id = set_b.rand_id
您实际上不需要随机化两组的顺序。如果一个是随机的,配对是随机的。在这种情况下,可以通过表的主键(用于生成序列ID的最快方式)来订购一组。