Muitas das vezes precisamos recuperar apenas algumas das diversas linhas retornadas por uma consulta SQL. Por isso, para economizar alguns bytes trafegando pela rede, nada mais fácil do que fazer a consulta só retornar a quantidade de linhas desejadas. Para fazer isso, segue abaixo o comando referente a diversos banco de dados.
SQL SERVER
SELECT TOP n nome_campos FROM nome_tabela
Onde n é o número de linhas desejadas, nome_campos são os campos ou o campo que será retornado e nome_tabela o nome da tabela.
Utilizando este recurso conseguimos também fazer paginação de dados. Por exemplo:
SELECT TOP 5 nome_campos FROM nome_tabela WHERE (campo_chave NOT IN Â (SELECT TOP 10 campo_chave FROM nome_tabela) )
Onde 5 é o número de registro por página e 10 é o resultado da multiplicação da quantidade de registros pela página atual. No exemplo, o SQL retornaria os registros da segunda página. Para retornar da terceira bastaria mudar o SQL substituindo o 10 por 15 e assim por diante.
MYSQL
SELECT * FROM TABELA LIMIT n
ou
SELECT * FROM TABELA LIMIT 0, n
No MySQL é ainda mais fácil fazer paginação de dados. Veja.
Ex.:
SELECT * FROM TABELA LIMIT 10, 5
Da mesma maneira que no exemplo do SQL Server, o resultado se aplica a uma paginação de 5 registros por página.
A paginação ocorre então ao mudar o valor 10 para 15, 20, 25 etc… Ou seja multiplicar a núrero da página pela quantidade de registro por página.
FIREBIRD
SELECT FIRST n nome_campos FROM nome_tabela;
Para fazer a paginação e pular os registros utiliza-se a cláusula SKIP.
SELECT FIRST n SKIP x nome_campos FROM nome_tabela;
INTERBASE
No INTERBASE não há o comando FIRST. Usa-se a cláusula ROWS no lugar.
SELECT nome_campos FROM nome_tabela ROWS n;
Para fazer a paginação e pular os registros utiliza-se a cláusula TO.
SELECT nome_campos FROM nome_tabela ROWS 5 TO 10;
Pingback: Selecionando a segunda linha de uma consulta no sql server
As informações de linha que você comenta é referente a minha dúvida abaixo?
Quebrar linha pelas categorias e subtotalizar
Categoria Frutas <———- Aqui quebra por categoria
——————————————————
Codigo Descricao Quantidade
——————————————————
1010 maçã 10
2020 banana 9
5150 abacate 5
6788 abacaxi 3
——————————————————
27 <——- subtotalizando
Categoria Perfumaria <—–Aqui quebra por categoria
——————————————————
Codigo Descricao Quantidade
——————————————————
9810 des masc xtrem 25
7520 col flor lis 20
3350 hidratante fps 30 19
2288 batom cereja 10
3745 batom marrom 7
5478 col fem luz do sol 7
8977 col mas Max 6
6578 des fem blue 5
1573 necessaire rosa 3
1008 col rose mask 2
——————————————————
167 <——- subtotalizando
Não. Para pegar a quantidade total de cada categoria como no seu exemplo, você deverá fazer um sum e agrupar pelo código da categoria. Por exemplo:
Agora para exibir na ordem somente, basta utilixar o order by
Mas acho que esta não é a sua dúvida. Se o que você está querendo fazer é um relatório (e eu penso que seja isto), e está fazendo este relatório na mão, você tem várias opções. Você pode primeiro fazer só o select buscando o código e a descrição das categorias e para cada categoria você faz outro sql buscando os produtos com essa categoria. Se você estiver utilizando um software de relatórios como o Crystal Report nem é preciso, basta fazer uma consulta normalmente e mandar agrupar por categoria. Dá pra fazer todas as somas automaticamente. Bom, se quiser que eu explique como fazer no Cristal é só falar.
E para selecionar somente a segunda linha de uma subconsulta. Tipo, pegar a segunda linha de cada contrato que pagou a segunda mensalidade. Não importanto a quantidade gerada de mensalidades e a quantidade de clientes.
Exemplo:
Cliente, Vencimento, Pagamento, ValorPago
1, 30/01/2011, 10/02/2011, 22,00
1, 28/02/2011, 01/03/2011, 22,00
2, 30/01/2011, 30/01/2011, 22,00
2, 28/02/2011, 10/03/2011, 22,00
etc, etc
Quero todos os clientes que pagaram somente a LINHA 2.
O resultado seria
1, 28/02/2011, 01/03/2011, 22,00 (Segundo Pagamento)
2, 28/02/2011, 10/03/2011, 22,00 (Segundo Pagamento)
Descartando o primeiro pagamento e os demais depois destes. Tem como ser feito isto? Será que poderia me ajudar? Não tenho outro identificador mais facil, como uma coluna Parcela, que poderia ser o numero da parcela, quando desenvolveram isto, não pensaram assim, infelizmente.