Выберите строки в случайном порядке и затем поверните их - PullRequest
2 голосов
/ 09 января 2011

Мне нужно выбрать строки в случайном порядке и вернуть запрос, который содержит строки как в обычном, так и в обратном порядке.Это сделано для имитации фантазии проекта для баскетбольного матча, над которым я работаю.

Например, мне нужен следующий набор результатов:первые четыре команды являются случайными, затем следующие четыре располагаются в обратном порядке.Надеюсь, мне удалось объяснить проблему, если нет - пожалуйста, прокомментируйте, и я объясню дальше.

Ответы [ 2 ]

2 голосов
/ 09 января 2011

Вы должны «кешировать» результаты случайного ORDER BY.

В этом коде, если вы ссылаетесь на CTE в UNION, он будет оцениваться дважды, и у вас будет 2 разных порядка.CTE - это просто макрос

;WITH cList AS
(
SELECT team, ROW_NUMBER() OVER (ORDER BY NEWID()) AS rn
FROM teams
)
SELECT * INTO #tempresults FROM cList WHERE rn <= @rn --or however many

SELECT *, rn FROM #tempresults
UNION ALL
SELECT *, (2 * @rn) - rn FROM #tempresults
ORDER BY rn

Дублирование строк легко с помощью фиктивного перекрестного соединения (, как это ), но это требует упорядочивания и округления нумерации промежуточных результатов.Я не думаю, что это можно сделать одним оператором SQL

1 голос
/ 09 января 2011

Вы можете использовать запрос как этот:

select top(10) teamname, NewId() as Random
from teams
order by Random

это вернет первую десятку случайных команд из вашей базы данных. Затем вы можете изменить его с помощью некоторого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...