Randomiser sélectionner distinct

Nous utilisons plusieurs bases de données au travail, au less Oracle et MSSQL. Je ne sais pas pourquoi nous devons utiliser les deux, mais cette question concerne MSSQL.

Il y a une table, appelons simplement System..DirectMapping qui a un champ accountID. Je ne peux pas garantir qu'ils sont tous numériques, mais ils semblent l'être.

Donc, ma question est vraiment en deux parties connexes.

Tout d'abord, je dois find un identifiant de count valide. C'est celui qui est dans la table. C'est simple, mais j'aimerais en avoir un au hasard.

Alors j'ai fait un

select distinct accountID from System..DirectMapping 

ce qui fonctionne mais ils sont toujours dans le même ordre. J'ai lu comment vous pourriez randomiser quelque chose en utilisant newid () alors j'ai essayé

  select distinct accountID from System..DirectMapping order by newid() 

mais il m'a donné une erreur que lors de la sélection de distinctes, l'ordre par champ doit se produire dans la sélection qui n'aurait pas de sens ici. J'ai donc essayé

  select accountID from (select distinct accountID from System..DirectMapping) j order by newid() 

mais il m'a donné une erreur similaire de ne pas pouvoir order par des vues. J'ai finalement juste lu le tout dans un tableau java et fait un Collections.shuffle () mais il vaudrait mieux le faire à partir de la requête car alors je pourrais limiter le nombre de résultats (je pense comme top 10 ..). Alors, y a-t-il un moyen de le faire?

Je vais save la deuxième question pour plus tard.

Vous pouvez faire un ORDER BY dans une vue si vous utilisez une spécification TOP:

  select TOP 100 PERCENT accountID from (select distinct accountID from System..DirectMapping) j order by newid()