使用SQL组合和随机化列

时间:2012-07-06 16:42:48

标签: sql sql-server-2008-r2

我有一列数据我需要并行复制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

2 个答案:

答案 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的最快方式)来订购一组