3

と の 2 つのテーブルがPersons(idPerson INT) ありQuestions(idQuestion INT)ます。

3番目のテーブルにデータを挿入したい:OrderedQuestions(idPerson INT, idQuestion INT, questionRank INT)

すべての人にすべての質問をランダムな順序で割り当てたいです。

CROSS JOINをしようと思ったのですが、全員同じ順番で質問されてしまいます。

INSERT INTO OrderedQuestions
    SELECT idPerson, idQuestion, questionRank FROM Persons 
    CROSS JOIN
    (SELECT idQuestion,ROW_NUMBER() OVER (ORDER BY NEWID()) as questionRank
    FROM Questions) as t

どうすれば、すべての人に対してそのようなランダムで異なる順序を達成できますか?

明らかに、私は解決策をできるだけ速くしたいと思っています。(TSQL または Linq to SQL を使用して実行できます)


3 人で 5 つの質問に対する望ましい結果:

   idPerson         idQuestion         questionRank
1.  1                18                  1
2.  1                14                  2
3.  1                25                  3
4.  1                31                  4
5.  1                2                   5
6.  2                2                   1
7.  2                25                  2
8.  2                31                  3
9.  2                18                  4
10. 2                14                  5
11. 3                31                  1
12. 3                18                  2
13. 3                14                  3
14. 3                25                  4
15. 3                2                   5

結果を編集しました (ID は自動生成されるため、質問の順序付けには使用できません)。

4

1 に答える 1

2

これはおそらくもっと効率的に記述できますが、すべての要件を満たしています。

SELECT 
    idperson, 
    idQuestion,
    ROW_NUMBER() OVER (PARTITION BY personid ORDER BY ordering) as questionRank 
FROM (
    SELECT idperson, idQuestion, ordering 
    FROM person
    CROSS JOIN 
    (
        SELECT idQuestion, NewID() as ordering FROM Question
    ) as t
) as a
order by personid, QuestionRank
于 2012-09-20T20:58:42.477 に答える