Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tuhajo

Loop agrupado

Recommended Posts

Boa Tarde, Galera!

 

Tenho que gerar um relatório em asp mas estou com uma dúvida.

Preciso agrupar pela data para calcular o total de paças do dia.

 

Exemplo do resultado do relatório exibido na tela hoje:

 

Data Qtde

01/03/2013 1

01/03/2013 2

01/03/2013 10

02/03/2013 5

02/03/2013 2

 

Preciso que seja exibido da seguinte forma:

 

Data Qtde

01/03/2013 1

01/03/2013 2

01/03/2013 10

Total 13

02/03/2013 5

02/03/2013 2

Total 7

 

Como faço para conseguir exibir assim?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é SQL? Ou outra coisa?

 

Se for SQL, use DISTINCT : http://www.w3schools.com/sql/sql_distinct.asp

 

 

SELECT DISTINCT nome_colunas(s) FROM `tabela`

Além do DISTINCT você pode usar dentro do loop uma variável com nome tipo lastKey (última chave), acaso a próxima chave (data) seja diferente você adiciona a linha "total:".

 

E para somar as colunas basta criar uma variável chamada somatoria também, a cada vez que a variável lastKey mudar você zera a variável somatoria. (Isso é só um ideia)

Compartilhar este post


Link para o post
Compartilhar em outros sites

simples,

 

cria uma variável para receber e somar os valores, e uma para receber a data corretnte.

 

dim contador, itemAnterior

 

set contador = 0

 

while not rs.eof

 

 

if itemAnterior <> rs("coluna_data") and contador = 0 then

 

' imprime o total

 

end if

 

'continua com o codigo.

 

 

contador = contador + rs("coluna_valor")


itemAnterior = rs("coluna_data")

 

wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

aconselho a usar o Group By do SQL, no seu caso agrupando pela data, vc consegue ter um maior desempenho e um processamento mais rápido atvés das instruções SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui fazer das 2 maneiras citadas acima, traz tudo desordenado.

 

Pra facilitar, segue meu código está assim:

<tr>

<td align="center" bgcolor="#C0C0C0"><b>DATA</b></td>

<td align="center" bgcolor="#C0C0C0"><b>PEÇA</b></td>

</tr>

<%

if (not rs.eof) then

 

while not rs.eof

data = rs("DATA")

qtde_peca = rs("PECA")

 

%>

<tr>

<td align="center"><%=data%></td>

<td align="center"><%=qtde_peca %></td>

</tr>

<%

rs.movenext

wend

end if

%>

<tr>

<td align="center" bgcolor="#C0C0C0"><font color="blue"><b>Total</b></font></td>

<td align="center" bgcolor="#C0C0C0"><font color="blue"><b>Tot Peça</b></font></td>

</tr>

 

Só que assim ele mostra o total depois de todas as datas. Não está agrupando por data e mostrando o total de peças por dia.

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

Compartilhar este post


Link para o post
Compartilhar em outros sites

o aggregate_function é apenas de exemplo para um uso assim:

 

 

SELECT funcionarios,SUM(salario) FROM tabela
GROUP BY funcionarios

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara existe uma técnica chamada Rollup em SQL.

 

Select Data, Count (pecas) as pecas
From #Tabela
Group by Rollup (Data, Pecas)

 

Good Luck , bons estudos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele serve
para mostrar que podemos obter um total geral. O ROLLUP não precisa
que se especifique nenhum campo e ele age em conjunto com o GROUP
BY e a função de agregação. Como exemplo o seguinte SELECT:

SELECT MODELO , COUNT(MODELO)
AS QTD_VENDIDA
FROM VEICULOS
GROUP BY MODELO
WITH ROLLUP
ORDER BY MODELO

Retornaria o seguinte resultado:

Veiculos3.jpg

Percebam que para a coluna modelo onde o ROLLUP
colocou o total geral de veículos recebeu o valor NULL que pode
ser facilmente modificado utilizando uma estrutura CASE.

No exemplo acima o operador ROLLUP gerou somente
uma linha contendo o total geral de vendas. Se colocássemos o
CUBE no lugar do ROLLUP neste exemplo o retorno de dados seria
o mesmo.

Até aqui estávamos sempre agregando por modelo.
E se quisermos além de agregar por modelo também agregar por ano?
A única coisa que precisamos fazer é colocar o campo ANO_F na
cláusula GROUP BY e na lista de campos:

SELECT MODELO , ANO_F , COUNT(MODELO)
AS QTD_VENDIDA
FROM VEICULOS
GROUP BY MODELO , ANO_F
WITH ROLLUP
ORDER BY MODELO

O Resultado:

Veiculos4.jpg

Percebam que além de mostrar o total geral o operador
ROLLUP também nos trouxe para cada modelo, independente do ano,
o total vendido. Olhe como exemplo o modelo CORSA: o total de
carros fabricados em 1998 vendidos por essa loja foi 5 e total
de carros os fabricados em 1999 vendidos foi 2. Logo abaixo o
modelo CORSA é mostrado com o valor NULL na coluna ANO_F e na
quantidade foi-se colocado 7 (5 + 2).

O operados ROLLUP neste exemplo acima gerou 7 linhas
, todas contendo NULL na coluna ANO_F.

Poderíamos também levar em consideração a coluna
COR para o nosso exemplo mas isso fica como um exercício para
o leitor bem como mudar a ordem dos campos para se obter a listagem
com o total por ano e não por modelo. O script possui exemplos
destes SELECTS.

SELECT MODELO , ANO_F , COUNT(MODELO)
AS QTD_VENDIDA
FROM VEICULOS
GROUP BY MODELO , ANO_F
WITH CUBE
ORDER BY MODELO

Obteremos o seguinte resultado:

Veiculos5.jpg

Que além de mostrar o resultado como o ROLLUP (fazendo
o total por modelo sem levar em consideração o ano) também temos
o total por ano sem levar em consideração o modelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.