boo*_*ife 5 sql-server sql-server-2014
我的桌子看起来像这样:
GroupID INT NOT NULL
SomeValue INT NOT NULL
Run Code Online (Sandbox Code Playgroud)
我想GroupID
在结果集中保持相同的行。不过,这些组本身应该是随机排序的。SomeValue
应该是次要排序标准。像这样:
GroupID, SomeValue
13, 1
13, 2
7, 1
7, 2
11, 1
11, 2
...
Run Code Online (Sandbox Code Playgroud)
ORDER BY GroupID, SomeValue
不会随机排序组。ORDERBY NEWID()
是完全随机的。ORDER BY SomeHash(GroupID), SomeValue
浮现在脑海中,但我每次都需要一个新的随机顺序。
如何才能做到这一点?
您只需要GroupID
值的随机顺序,因此首先在派生表中获取这些不同的值和每个值的随机数:
SELECT t.*
FROM tablename AS t
JOIN
( SELECT GroupID,
NEWID() AS rnd -- or another random function
FROM tablename
GROUP BY GroupID
) AS r
ON r.GroupID = t.GroupID
ORDER BY
r.rnd,
t.SomeValue ;
Run Code Online (Sandbox Code Playgroud)
如果您已经有一个Groups
包含GroupID
值的表,则可以将其替换FROM tablename GROUP BY GroupID
为FROM Groups
.