2010-08-31 3 views
0

Представьте себе простой запрос:запрос, чтобы выбрать определенное количество строк

SELECT name, lastname FROM people 

Давайте представим, что возвращает 6 строк. Что мне нужно сделать, так это вернуть несколько строк, которые ROWS Mod 4 будет равным 0. Поэтому, если запрос обычно возвращает 6 строк, он должен вернуть еще 2 строки с NULL для имени и имени. Легко подсчитывать строки, которые он будет возвращать, и генерировать необходимые объединения, но мне интересно, можно ли это сделать в sql. Я знаю, звучит любопытное глупо, и вы, вероятно, думал о говорить мне найти другое решение, но это самый простой способ решения моей проблемы;]

+0

Не могли бы вы описать вашу проблему, чтобы найти другое решение? –

+0

Каковы ваши rdbms? –

+0

Тот, на который вы уже дали ответ. MSSQL. Спасибо, я попробую это –

ответ

2

для оракула:

SELECT name, lastname FROM people 
UNION ALL 
SELECT NULL, NULL FROM people 
WHERE RowNum <= (Select mod(Count(*),4) from people) 

для MSSQL: (> = 2005)

SELECT name, lastname FROM people 
UNION ALL 
select null, null from 
(
    SELECT row_number() over(order by name) r FROM people 
) 
WHERE r <= (Select Count(*) % 4 from people) 
+0

К сожалению, мой mssql дает ошибку неправильного синтаксиса рядом с «где». Во всяком случае, я только что посмотрел на свой запрос, и для меня это слишком сложно превратить в это. Он станет нечитаемым со всеми этими объединениями и операторами. Думаю, я просто добавлю необходимые союзы к sql программно. Спасибо за помощь! –

Смежные вопросы