0

我有一列数据需要并排随机复制 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的帖子

4

2 回答 2

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
于 2012-07-06T17:16:19.373 回答
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)

于 2012-07-06T17:22:35.450 回答