1

サンプル テーブルの場合:

ID courseId dishID
1  1        1
2  1        5
3  2        4
4  1        7
5  2        8

一意の courseId のランダムなお皿 ID で選択したくありません。だから私の結果は

ID courseId dishId
1  1        1
3  2        4

そして、他の random よりも再度実行すると:

ID courseId dishId
2  1        5
5  2        8

等...

Microsoft SQL 2008 を使用しています

例えば

SELECT * FROM Table 
WHERE dishId IN
(SELECT MIN(dishId) 
FROM Table 
GROUP BY courseId

それは正しい結果を返しますが、dishIdは常に同じですが、dishIdがランダムな料理であることを望みます

または、最初に courseId = 1 で 1 つのテーブルから選択し、courseId 2 で再度選択して (両方の結果を newId() で並べ替え)、UNION を作成できますが、コースが 7 つある場合は、7 つの選択文を持ちたくありません。 .. UNION なしで同じ結果が得られることを願っています

4

1 に答える 1

3
select ID, courseId, dishID from (
select row_number() over (partition by courseId order by newid()) as n, *
from Table 
) t
where n = 1
于 2013-04-09T11:44:43.090 に答える