Ir para conteúdo

Arquivado

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

edsonantolini

[Resolvido] Group By

Recommended Posts

Ola, Pessoal.

 

Estou com um problema dificil de resolver para mim q não sei muito ainda sobre sql.

 

Preciso fazer fazer um group by em 3 campos.. Pedido/Item/Data.

 

Caso a data, pedido ou item foram iguais soma a quantidade eo faturamento.

 

Segue o select que me tras as informações. Obrigados a Todos.

SELECT PEDIDO+cast(DAY(E.SAIDA) as varchar(2))+ '/'+cast(MONTH(E.SAIDA) as varchar(2))

+'/'+cast(YEAR(E.SAIDA) as varchar(4)) as ChaveFaturamento,

PEDIDO+cast(DAY(PG.DATA) as varchar(2))+ '/'+cast(MONTH(PG.DATA) as varchar(2))+'/'

+cast(YEAR(PG.DATA) as varchar(4)) as ChavePedido,

E.SAIDA as DTSAIDA,

E.NOTANUM, PF.QUANTPROG as QUANTIDADE, I.PTOTAL/ I.QUANTEST AS PUNIT, pg.codpedido as PEDIDO, PG.DATA as DATAPROGR,

PG.QUANTIDADE AS QTD_PROG, PE.DATAPEDIDO, pe.pedidocliente, PF.QUANTPROG*PUNIT as Faturamento,

I.CODITEM

FROM ITEMENTR I(NOLOCK)

INNER JOIN ENTREGA E(NOLOCK) ON (E.VENDA=I.CODORDVEND)

INNER JOIN NATOPER N(NOLOCK) ON (N.CODIGO=E.CODAUTONATOPER)

INNER JOIN PROGFATVEND PF(NOLOCK) ON (PF.CODITEMENTR = I.CODIGO)

INNER JOIN PROGPED PG(NOLOCK) ON (PG.CODSEQ = PF.CODPROGPED)

INNER JOIN PEDIDOS PE(NOLOCK) ON (PE.CODSEQ = PG.CODPEDIDO)

WHERE SAIDA BETWEEN '10/14/2010' AND '10/14/2010'

AND (N.EMITETIT IS NULL OR N.EMITETIT='' OR N.EMITETIT = ' ' OR N.EMITETIT = 'F')

AND E.STATUS='EMIT'

ORDER BY 4, 7

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser isto, mude o agrupamento caso necessário.

Veja o manual de SQL para o uso do group by.

 

SELECT PEDIDO+cast(DAY(E.SAIDA) as varchar(2))+ '/'+cast(MONTH(E.SAIDA) as varchar(2))
+'/'+cast(YEAR(E.SAIDA) as varchar(4)) as ChaveFaturamento,
PEDIDO+cast(DAY(PG.DATA) as varchar(2))+ '/'+cast(MONTH(PG.DATA) as varchar(2))+'/'
+cast(YEAR(PG.DATA) as varchar(4)) as ChavePedido,
E.SAIDA as DTSAIDA,
E.NOTANUM, PF.QUANTPROG as QUANTIDADE, 
I.PTOTAL/ I.QUANTEST AS PUNIT, 
pg.codpedido as PEDIDO, 
PG.DATA as DATAPROGR,
I.CODITEM,
PE.DATAPEDIDO, 
pe.pedidocliente, 
SUM(PG.QUANTIDADE) AS QTD_PROG, 
SUM(PF.QUANTPROG*PUNIT) as Faturamento
FROM ITEMENTR I(NOLOCK)
INNER JOIN ENTREGA E(NOLOCK) ON (E.VENDA=I.CODORDVEND)
INNER JOIN NATOPER N(NOLOCK) ON (N.CODIGO=E.CODAUTONATOPER)
INNER JOIN PROGFATVEND PF(NOLOCK) ON (PF.CODITEMENTR = I.CODIGO)
INNER JOIN PROGPED PG(NOLOCK) ON (PG.CODSEQ = PF.CODPROGPED)
INNER JOIN PEDIDOS PE(NOLOCK) ON (PE.CODSEQ = PG.CODPEDIDO)
WHERE SAIDA BETWEEN '10/14/2010' AND '10/14/2010'
AND (N.EMITETIT IS NULL OR N.EMITETIT='' OR N.EMITETIT = ' ' OR N.EMITETIT = 'F')
AND E.STATUS='EMIT'
GROUP BY PEDIDO+cast(DAY(E.SAIDA) as varchar(2))+ '/'+cast(MONTH(E.SAIDA) as varchar(2))
+'/'+cast(YEAR(E.SAIDA) as varchar(4)) as ChaveFaturamento,
PEDIDO+cast(DAY(PG.DATA) as varchar(2))+ '/'+cast(MONTH(PG.DATA) as varchar(2))+'/'
+cast(YEAR(PG.DATA) as varchar(4)) as ChavePedido,
E.SAIDA as DTSAIDA,
E.NOTANUM, PF.QUANTPROG as QUANTIDADE, 
I.PTOTAL/ I.QUANTEST AS PUNIT, 
pg.codpedido as PEDIDO, 
PG.DATA as DATAPROGR,
I.CODITEM,
PE.DATAPEDIDO, 
pe.pedidocliente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, a query que você monto ta funcionando! Mais ela ainda me tras os dados repedidos como

Nota -----------------------------------------------------Pedido---------------------------------------------------------------------------------------------------Faturamento

20383---134095--0,063289980983631-------18288---801023.0000.9770.A00A---2010-09-16 09:31:00.000 5500023844------300000--8486872,55

20383---207400--0,0854599807135969------18288---801023.0001.0152.A00B---2010-09-16 09:31:00.000 5500023844------600000--17724404

 

Conforme os resultado acima... a nota esta se repetindo...

 

queria aparece-se uma unica linha com o numero da nota eo pedido e soma o faturamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nota -----------------------------------------------------Pedido---------------------------------------------------------------------------------------------------Faturamento

20383---134095--0,063289980983631-------18288---801023.0000.9770.A00A---2010-09-16 09:31:00.000 5500023844------300000--8486872,55

20383---207400--0,0854599807135969------18288---801023.0001.0152.A00B---2010-09-16 09:31:00.000 5500023844------600000--17724404

 

Talvez você tenha de tirar do agrupamento o que está demais.

 

Você já usou group by antes ?

Caso não, seria bom ler alguma documentação sobre seu uso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Ja usei sim varias vezes. mais com varias tabelas juntas com inner join, nunca usei.

 

Para simplicar, eu tenho varias NATANUM (NF), varias linhas que me tras.

 

Quando for pesquisar por Nota, me tras varias linhas com o mesmo numero de nota mais com os itens deferente..

 

OBS: queria que imprimi uma unica linha com o numera da nota eo total da quantidade da nota mesquisada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta retirar da lista de campos do select e do group by o que você não quer.

 

Tanto faz ter ou não join

 

SELECT PEDIDO+cast(DAY(E.SAIDA) as varchar(2))+ '/'+cast(MONTH(E.SAIDA) as varchar(2))

+'/'+cast(YEAR(E.SAIDA) as varchar(4)) as ChaveFaturamento,

PEDIDO+cast(DAY(PG.DATA) as varchar(2))+ '/'+cast(MONTH(PG.DATA) as varchar(2))+'/'

+cast(YEAR(PG.DATA) as varchar(4)) as ChavePedido,

E.SAIDA as DTSAIDA,

E.NOTANUM, PF.QUANTPROG as QUANTIDADE,

I.PTOTAL/ I.QUANTEST AS PUNIT,

pg.codpedido as PEDIDO,

PG.DATA as DATAPROGR,

I.CODITEM,

PE.DATAPEDIDO,

pe.pedidocliente,

SUM(PG.QUANTIDADE) AS QTD_PROG,

SUM(PF.QUANTPROG*PUNIT) as Faturamento

FROM ITEMENTR I(NOLOCK)

INNER JOIN ENTREGA E(NOLOCK) ON (E.VENDA=I.CODORDVEND)

INNER JOIN NATOPER N(NOLOCK) ON (N.CODIGO=E.CODAUTONATOPER)

INNER JOIN PROGFATVEND PF(NOLOCK) ON (PF.CODITEMENTR = I.CODIGO)

INNER JOIN PROGPED PG(NOLOCK) ON (PG.CODSEQ = PF.CODPROGPED)

INNER JOIN PEDIDOS PE(NOLOCK) ON (PE.CODSEQ = PG.CODPEDIDO)

WHERE ...

GROUP BY PEDIDO+cast(DAY(E.SAIDA) as varchar(2))+ '/'+cast(MONTH(E.SAIDA) as varchar(2))

+'/'+cast(YEAR(E.SAIDA) as varchar(4)) as ChaveFaturamento,

PEDIDO+cast(DAY(PG.DATA) as varchar(2))+ '/'+cast(MONTH(PG.DATA) as varchar(2))+'/'

+cast(YEAR(PG.DATA) as varchar(4)) as ChavePedido,

E.SAIDA as DTSAIDA,

E.NOTANUM, PF.QUANTPROG as QUANTIDADE,

I.PTOTAL/ I.QUANTEST AS PUNIT,

pg.codpedido as PEDIDO,

PG.DATA as DATAPROGR,

I.CODITEM,

PE.DATAPEDIDO,

pe.pedidocliente

 

Retire o que está em vermelho por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Estou tão louco ja,, a primeira solução que você me envio ja funciono... é so eu ter Itens repetidos na mesquisa q ja vinha o valor somado..

 

Valeu Um grande abraço.. Meus Parabens .. pela Solução.

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.