Minha tabela está assim:
GroupID INT NOT NULL
SomeValue INT NOT NULL
Eu gostaria de manter as linhas com o mesmo GroupID
conjunto no conjunto de resultados. Os próprios grupos devem ser ordenados aleatoriamente, no entanto. SomeValue
é suposto ser o critério de classificação secundário. Assim:
GroupID, SomeValue
13, 1
13, 2
7, 1
7, 2
11, 1
11, 2
...
ORDER BY GroupID, SomeValue
não ordena os grupos aleatoriamente. ORDERBY NEWID()
é totalmente aleatório. ORDER BY SomeHash(GroupID), SomeValue
vem à mente, mas preciso de uma nova ordem aleatória a cada vez.
Como isso pode ser feito?
Você só precisa de uma ordem aleatória para os
GroupID
valores, então primeiro obtenha esses valores distintos e um número aleatório para cada um, em uma tabela derivada:Se você já possui uma
Groups
tabela que contém osGroupID
valores, pode substituí-laFROM tablename GROUP BY GroupID
porFROM Groups
.Você também pode usar (Obrigado a ypercubeᵀᴹ pela correção)
Demonstração on-line