У меня есть ситуация, когда иногда выбирайте строки по порядку или иногда произвольно выбирайте n строк.Выберите верхний n или * на основе условия SQL
Так что я пытался сделать это в одном запросе, как этот
declare @rand int
set @rand = 0
select top (case @rand when 0 then 1000 else @rand end) *
from MyQuestion
where PackageID = 10
order by sequence
Это работает отлично, как и в моем плане. Но если общее число строк больше 1000, то это не сработает. Тогда да, если я укажу 10000, которые будут работать в этом случае. Но это не оптимально, я думаю. Поэтому я ищу решение, где я могу извлечь все строки без какого-либо числа, указанного или просто, что следует игнорировать верхнюю часть и он будет получать все строки, когда @rand является 0
проблема заказа
Другим вопросом, в тот же запрос, когда требуется случайный выбор.
Так что я изменил в запросе этого пути для случайного выбора, когда @rand имеют некоторые значения в нем
declare @rand int
set @rand=0
select top (case @rand when 0 then 1000 else @rand end) *
from MyQuestion
where PackageID = 10
order by (case @rand when 0 then sequence else NEWID() end)
Но выдает ошибку говоря
Операнда типа столкновение: UniqueIdentifier несовместима с междунар
Таким образом, мой сценарий состоит в том, чтобы случайным образом выбирать строки на основе переменной @rand или завершить ее в порядке, основанном на столбце последовательности (упорядоченном).
Почему вы не пишете два разных запроса и не используете код приложения для выбора подходящего? Это может быть проще. –
В следующий раз, пожалуйста, не редактируйте свой вопрос, чтобы сделать его совершенно новым с совершенно новым запросом. Мой ответ ниже был * полным * ответом на данный вопрос; но теперь, когда ваш вопрос изменился, другие ответы, которые люди предоставили, теперь лучше, и мой ответ неполный - по моей вине. – ErikE