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
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+
C
creipiPJ
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
J
jeveauxPJ
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+
V
vanderofPJ
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
C
creipiPJ
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]
E
eaduartePJ
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…
A
arsysPJ
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:
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+
È 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}??
J
Juliano_CarnielPJ
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!
F
FelipeSS_2PJ
E ae Jujo descobriu??? :lol:
J
Juliano_CarnielPJ
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!
F
FelipeSS_2PJ
valeu vou ver porque ele retorna essa doidera…valeu