|
Inicio → WINDEV 25 → Como paginar um retorno de um select ? Como fazer uma paginação de resultados? |
Como paginar um retorno de um select ? Como fazer uma paginação de resultados? |
Iniciado por Boller, 14,ago. 2023 18:50 - No hay respuesta |
| |
| | | |
|
| |
Miembro registrado 4.521 mensajes |
|
Publicado el 14,agosto 2023 - 18:50 |
Oi pessoal,
Pergunta que me fizeram:
Como fazer uma paginação de resultados?
R.:
Simples, Vc nao coloca uma tabela com milhões de registro, usa paginação
Select * from tabela Limit nqtdeReg offset nqtdeRegpaginacao
Isso no Hfsql e no PostgreSQL rows
SELECT coluna1, ... FROM tabela WHERE ... ORDER BY coluna1, ... OFFSET @Offset ROWS FETCH NEXT @Limit ROWS ONLY;
É inviável dar uma carga de milhões, bilhões de registros
Por isso que tem os botoes << < > >>
No seu caso você pode trocar a variável @Limit para @QtdPorPagina e @Offset para (@Pagina - 1) * @QtdPorPagina e utilizar da seguinte forma:
DECLARE @QtdPorPagina INT = 50, @Pagina INT = 1; Substituindo na sua query
DECLARE @QtdPorPagina INT = 50, @Pagina INT = 1;
SELECT os.id, os.dataHora, material.nome AS nomeEquip, cliente.nomeFantasia, setor.nome AS NomeSetor, os.motivoOs, (SELECT SUM(itemMaterial.valorUnitario) FROM os AS OS1 INNER JOIN itemMaterial ON itemMaterial.id = os.idItemMaterial WHERE OS1.id = os.id ) AS TotalMaterial, tipoOs.nome AS NomeTipoOS, itemMaterial.nSerie, itemMaterial.rm, os.status FROM os INNER JOIN itemMaterial ON itemMaterial.id = os.idItemMaterial INNER JOIN modelo ON modelo.id = itemMaterial.idModelo INNER JOIN material ON material.id = itemMaterial.idMaterial INNER JOIN cliente ON cliente.id = os.idCliente INNER JOIN setor ON setor.id = os.idSetor INNER JOIN usuario ON usuario.id = os.idUsuarioSolicitante INNER JOIN tipoOs ON tipoOs.id = os.idTipoOs WHERE cliente.id = (SELECT usuario.idCliente FROM usuario WHERE usuario.login = 'julio') ORDER BY dataHora DESC OFFSET (@Pagina - 1) * @QtdPorPagina ROWS FETCH NEXT @QtdPorPagina ROWS ONLY;
Para SQL Server anterior ao 2012
Para obter um resultado parecido você pode utilizar a função ROW_NUMBER()para gerar o número da linha e trabalhar com essa informação da seguinte forma:
WITH resultado AS (SELECT coluna1, ..., ROW_NUMBER() OVER (ORDER BY coluna1, ...) AS linha FROM tabela WHERE ...) SELECT * FROM resultado WHERE linha >= @Offset AND linha < @Offset + @Limit
Veja também:
Para paginar é necessária uma ordenação (ORDER BY) dos registros para o seu caso:
SELECT * FROM table ORDER BY 1 --Nome campo OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY
Muita atenção
Ok
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
|