Limitando o número de linhas em um select

Estou criando uma procedure no SQL SERVER 7 para mostrar:

5 usuários que mais solicitaram empréstimos, ela está mostrando todos os usuários da tabela empréstimo, eu não estou sabendo como fazer que apareça só os 5 que mais solicitaram empréstimos, o código está abaixo:

Tem alguma maneira de limitar o número de linhas de um resultado select?

CREATE PROCEDURE ConsultaCincoMais AS select u.Nome 'Nome' , Count(e.CodUsuario) 'Quantidade_Empréstimos' from Emprestimo e inner join Usuario u on e.CodUsuario = u.CodUsuario group by u.Nome order by Quantidade_Empréstimos desc

Abraços, creipi

Oi

creipi, usando SQL Server eu não sei se vai dar certo, mas com o MySQL é garantido, basta vc usar no final de sua query:

Da uma olhada neste exemplo:

T+

Prezado jeveaux,

Tentei da forma como você disse mas não deu certo, de qualquer forma obrigado pela atenção dispensada. Se você tiver mais uma dica eu agradeço.

creipi

Oi

creipi, como havia dito antes, eu não sabia se ia funcionar no SQL Server, mas se eu descobrir um jeito eu posto pra ti…

Vc pode tentar fazer um lógica do tipo:

for(int i=0; i<5; i++) { if(rs.next()) //Pega o resultado }

T+

Meu Camara,

o comando SET ROWCOUNT define quantas linhas a query deve retornar como resultado. Eu não sei se dentro de uma procedure existe restrição para o seu uso. Bom, supondo que não haja restrição por parte do SQL SERVER a procedure ficaria da forma abaixo.

Abraços,
Vanderlei

CREATE PROCEDURE ConsultaCincoMais AS

– define retorno de 5 linhas
SET ROWCOUNT 5

select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) >= 5
order by Quantidade_Empréstimos desc

– define o valor default para todas as linhas
SET ROWCOUNT 0

Prezado vanderof,

Deu certo. A única alteração que fiz foi:

troquei:
having count(e.CodUsuario) >= 5

por:
having count(e.CodUsuario) <= 5

Valeu, obrigado

creipi[/quote]

Olá creipi,

Não conheço o SQL SERVER, trabalho com ORACLE, mas acho que o
HAVING COUNT() tem a mesma função. Portanto se vc deseja listar apenas os cinco clientes que fizeram mais empréstimos o HAVING COUNT() não vai te ajudar.

Se vc utilizar no ORACLE o “having count(e.CodUsuario) >= 5” ele retornará apenas os clientes que fizeram empréstimos por 5 ou mais vezes e não os cinco clientes que fizeram mais empréstimos.

Segue um exemplo no ORACLE de como listar os cinco clientes que fizeram mais empréstimos:

SELECT ROWNUM,
cliente,
qtdeEmprestimos
FROM (SELECT cli.cod_cli cliente,
COUNT() qtdeEmprestimos
FROM clientes cli,
emprestimos emp
WHERE cli.cod_cli = emp.cod_cli
GROUP BY cli.cod_cli
ORDER BY COUNT(
) DESC)
WHERE ROWNUM <= 5

Um abraço,

Espero ter ajudado…

Tente o seguinte

"SELECT TOP 5 " + "O RESTANTE DA CONSULTA NOMALMENTE

Aí ele vai trazer somente os 5 primeiros que satisfazem a consulta, aí você pode determinar quais serão os 5 primeiros utilizando o ORDER BY… :lol:

Deu certo, o código é o seguinte:

[code]CREATE PROCEDURE ConsultaCincoMais AS

– define retorno de 5 linhas
SET ROWCOUNT 5

select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) >= 5
order by Quantidade_Empréstimos desc

– define o valor default para todas as linhas
SET ROWCOUNT 0[/code]

Obrigado a todos, valeu.

Aí está a rotina correta,

[code]CREATE PROCEDURE ConsultaCincoMais AS

– define retorno de 5 linhas
SET ROWCOUNT 5

select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) <= 5
order by Quantidade_Empréstimos desc

– define o valor default para todas as linhas
SET ROWCOUNT 0[/code]

Obrigado, creipi

[quote=“jeveaux”]Oi

creipi, usando SQL Server eu não sei se vai dar certo, mas com o MySQL é garantido, basta vc usar no final de sua query:

Da uma olhada neste exemplo:

T+[/quote]

È realmente funciona legal no my sql…agora não entendi uma coisa tipo eu coloquei LIMIT 0,5 vieram 2 registros-coloquei 0,15 vieram 8 registros
coloquei 0,30 vieram 11 registos…Qual o parametro usado para a escolha 0 é a primeirq e ,15 a ultima linha???

Estranho isso deveria ter vindo 0,15 15 linhas não}??

Poxa Felipe,

vc escreveu algo que me deixou intrigado realemente… vou tentar fazer algo pra testar isso hoje…

depois posto o resultado aqui!

Até mais!

E ae Jujo descobriu??? :lol:

Ahhh desculpa Felipe.

Funcionou conforme o proposto:

Retornou 15 linhas
e assim o mesmo com os outros parametros!

Tente ver ai o que deu no seu e poste aqui!

Abraço!

valeu vou ver porque ele retorna essa doidera…valeu