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ソリューションに関するこの投稿とよく似ています。列をランダム化する

4

2 に答える 2

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

実際には、両方のセットの順序をランダム化する必要はありません。どちらかがランダムの場合、ペアリングはランダムです。その場合、1 つのセットをテーブルの主キーで並べ替えることができます(順次 ID を生成する最速の方法のため)

于 2012-07-06T17:22:35.450 に答える
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 に答える