Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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.
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.
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.
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.
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