GARANTIR DESCONTO

Fórum Agrupando datas diferentes e somando #504563

17/12/2014

0

Olá, bom dia a todos.

Estou com um problema tenho uma query montada onde me traz o saldo de pedido, saldo de estoque e a diferença que eu preciso produzir, porém existem casos que o mesmo item em prazo de entregas diferentes eu queria agrupar as datas e somar.

Hoje esta assim?

[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20141217-090232.jpg[/img]


Gostaria que ficasse assim porém preservase o campo prz_entrega pois eu consigo que ele agrupe e some porém tenho que tirar o campo prz_entrega e esse campo eu vou precisar utilizar ele para realizar filtros com isso gostaria do resultado abaixo porém com o campo prz_entrega aparecendo.

[img]http://arquivo.devmedia.com.br/forum/imagem/402654-20141217-090306.jpg[/img]
Dagoberto Neto

Dagoberto Neto

Responder

Post mais votado

17/12/2014

Por que vc não incluir apenas a maior data de entrega?

Marisiana Battistella

Marisiana Battistella
Responder

Gostei + 1

Mais Posts

17/12/2014

Dagoberto Neto

Marisiana, boa tarde e obrigado pela atenção.

Então não posso colocar uma data especifica, pois esta query vai virar um relatório e este relatório um dos campos que estará disponível para o usuário realizar filtro é o prz_entrega onde ele vai colocar a data que ele quiser entendeu ou seja prz_entrega <= 'Data x'.
Responder

Gostei + 0

17/12/2014

Alex Lekao

Ola Boa tarde!!!

Entao, acredito que a sugestao da Marisiana sugeriu era para vc usar alguma opcao de max(prz_entrega) por exemplo(isso existe assim no sql server, nao sei se no mysql eh assim tbm. rsrsr) ai vc faz os agrupamentos e calculos que vc deseja e faz uso da maior data.

Se entendi bem, seria por isso a sugestao. rsrsr

Abraco.
Responder

Gostei + 0

17/12/2014

Isaac Jose

vc nao pode deixar com o max(prazo de entrega) e somar o resto?
Responder

Gostei + 0

17/12/2014

Isaac Jose

Ola Boa tarde!!!

Entao, acredito que a sugestao da Marisiana sugeriu era para vc usar alguma opcao de max(prz_entrega) por exemplo(isso existe assim no sql server, nao sei se no mysql eh assim tbm. rsrsr) ai vc faz os agrupamentos e calculos que vc deseja e faz uso da maior data.

Se entendi bem, seria por isso a sugestao. rsrsr

Abraco.


karaka lekao respondemos ao mesmo tempo...kkkkk
e o seu relatorio funcionou?
abraços
Responder

Gostei + 1

17/12/2014

Alex Lekao

kkkk....

num eh cara?? rsrsr

vixi Isaac, qual deles? rsrsr

eu consegui fazer alguns que estava precisando, mas dei uma parada para resolver outras coisas e nao tive como continuar. rsrr
Responder

Gostei + 0

17/12/2014

Marisiana Battistella

Marisiana, boa tarde e obrigado pela atenção.

Então não posso colocar uma data especifica, pois esta query vai virar um relatório e este relatório um dos campos que estará disponível para o usuário realizar filtro é o prz_entrega onde ele vai colocar a data que ele quiser entendeu ou seja prz_entrega <= 'Data x'.


Se o objetivo é obter o total de entregas no período que o usuário filtrou, não tem necessidade de incluir o campo prazo de entrega no SELECT, apenas realiza a restrição do retorno filtrando os dados em que o prazo de entrega esteja no período informado pelo usuário.
Se quiser postar o select que vc está fazendo, fica mais fácil te ajudar....
Responder

Gostei + 1

18/12/2014

Dagoberto Neto

Então eu tenho que respeitar as datas que estão no prz_entrega, pois um exemplo hoje é dia 18 mas quero ver as entregas que já tenho a frente para trás ai o usuário no campo prz_entrega no relatorio vai colocar prz_entrega <= '23-12-2014' ai vai ser executado o relatório e o que tiver do dia 23 pra trás ele vai trazer e caso exista o mesmo item no dia 18,20 e 23 ele já me traga somado, abaixo o select...

SELECT
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
,(SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) AS saldo_estoque
,((SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel))dif_receb
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = '0' AND b.cod_seg_merc = '0')teste_a
,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = c.cod_lin_recei AND b.cod_seg_merc = '0')teste_b

FROM ped_itens a

JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
AND(c.ies_situacao = 'A')
AND(c.ies_tip_item = 'F')

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'

GROUP BY
a.cod_empresa
,a.cod_item
,c.den_item
,c.den_item_reduz
,c.cod_unid_med
,a.prz_entrega
,teste_a
,teste_b
Responder

Gostei + 0

18/12/2014

Alex Lekao

Oi Bom dia!!!

Nesse caso que vc citou, a opcao max(prz_entrega) ja resolveria, eh claro que nao sei se no mysql eh esse comando tbm. rsrsr

se nao estou enganado ele ja eh um agrupamento, entao ja resolveria o que vc precisa, sem informar no group by.

Acredito que ficaria mais ou menos assim:

SELECT
   a.cod_empresa
   ,a.cod_item
   ,c.den_item
   ,c.den_item_reduz
   ,c.cod_unid_med
   ,max(a.prz_entrega) as prz_entrega
   ,sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel)saldo_pedidos
   ,(SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) AS saldo_estoque
   ,((SELECT (z.qtd_liberada) FROM estoque z WHERE z.cod_empresa = a.cod_empresa AND z.cod_item = a.cod_item) - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel))dif_receb
  ,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = '0' AND b.cod_seg_merc = '0')teste_a
   ,(SELECT b.den_estr_linprod FROM linha_prod b WHERE b.cod_lin_prod = c.cod_lin_prod AND b.cod_lin_recei = c.cod_lin_recei AND b.cod_seg_merc = '0')teste_b
   
FROM ped_itens a

JOIN item c
   ON(c.cod_empresa = a.cod_empresa)
   AND(c.cod_item = a.cod_item)
   AND(c.ies_situacao = 'A') 
   AND(c.ies_tip_item = 'F') 

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'

GROUP BY
   a.cod_empresa
   ,a.cod_item
   ,c.den_item
   ,c.den_item_reduz
   ,c.cod_unid_med
   ,teste_a
   ,teste_b


espero ter ajudado.

Abraco.
Responder

Gostei + 0

18/12/2014

Dagoberto Neto

A todos bom dia, como é bom participar de um fórum como este, estava tentando varias maneiras e não estava tendo êxito mas acho que agora com a ideia da Marisiana e o reforço do Lekão, acho que esse é o caminho e a solução, vou fazer alguns testes antes de fechar o fórum, mas show de bola mesmo, estou muito grato pela ajuda.
Responder

Gostei + 1

18/12/2014

Marisiana Battistella

Eu posso até estar enganada, mas eu acho que o teu SQL não está atendendo a regra que vc quer que atenda...
Se você precisa filtrar as entregar dentre um periodo que o usuário vai informar, vc deve restringir o retorno da consulta filtrando os registros que estão dentre esse periodo.
Ou seja, incluindo
WHERE prz.entrega BETWEEN in_datainicial AND in_datafinal


Outro detalhe que me chamou atenção você definiu
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
AND(c.ies_situacao = ''A'') 
AND(c.ies_tip_item = ''F'') 

Se as restrições AND(c.ies_situacao = ''A'') e AND(c.ies_tip_item = ''F'') são uma regra que a consulta todasdeve atender, elas devem estar definidas na clausula WHERE e não no JOIN entre as tabelas.
Responder

Gostei + 1

18/12/2014

Dagoberto Neto

Marisiana, bom dia.
Bom já deu certo com o que você tinha dito antes e com o reforço do Lekão, fiz os testes aqui e me atendeu perfeitamente.
Quanto o between os mesmos não usam pois eles não pegam um intervalo e sim a data atual ou a data da frente para trás ou seja <=.
Quanto as regras de consultas foi bom você me informar, apesar de estar funcionando da forma que esta, porém realmente você tem razão o certo é tratar na cláusula Where.

Vou dar esse assunto como encerrado, como eu sou novo aqui eu tenho que fechar o assunto? Caso sim como faço?
Responder

Gostei + 1

18/12/2014

Marisiana Battistella

Esses Subselect são desnecessários pois vc tá fazendo junções com as tabelas ped_itens e item c que são as referenciadas na consulta.
Utilizar Subselect, dessa forma que vc definiu, não é um boa prática de programação...
Veja um exemplo de como poderia ser construído o SELECT:

SELECT a.cod_empresa,
a.cod_item,
c.den_item,
c.den_item_reduz,
c.cod_unid_med,
sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) as saldo_pedidos, 
z.qtd_liberada as saldo_estoque,
( z.qtd_liberada - sum(a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) as dif_receb,
CASE 
     WHEN b.cod_lin_recei = '0' THEN
          b.den_estr_linprod
      END  teste_a,
b.den_estr_linprod as teste_b
FROM ped_itens a
JOIN item c
ON(c.cod_empresa = a.cod_empresa)
AND(c.cod_item = a.cod_item)
JOIN estoque z
ON z.cod_empresa = a.cod_empresa
AND z.cod_item = a.cod_item
JOIN linha_prod b
ON b.cod_lin_prod = c.cod_lin_prod
AND b.cod_lin_recei = c.cod_lin_recei

WHERE (a.qtd_pecas_solic-a.qtd_pecas_atend-a.qtd_pecas_cancel) > '0'
AND(c.ies_situacao = 'A') 
AND(c.ies_tip_item = 'F') 
AND b.cod_seg_merc = '0'
AND a.prz_entrega BETWEEN '02/03/2014' AND '23/10/2014'

GROUP BY a.cod_empresa,
a.cod_item,
c.den_item,
c.den_item_reduz,
c.cod_unid_med,
teste_a,
teste_b


OBS.: Certamente terá erro na sintaxe, pois não testei, fiz a alteração pela lógica da estrutura apresentada e certamente precisa de correções.

Me desculpe se eu estiver sendo inconveniente por expor minha opinião.
Espero estar ajudando!
Responder

Gostei + 1

18/12/2014

Marisiana Battistella

Marisiana, bom dia.
Bom já deu certo com o que você tinha dito antes e com o reforço do Lekão, fiz os testes aqui e me atendeu perfeitamente.
Quanto o between os mesmos não usam pois eles não pegam um intervalo e sim a data atual ou a data da frente para trás ou seja <=.
Quanto as regras de consultas foi bom você me informar, apesar de estar funcionando da forma que esta, porém realmente você tem razão o certo é tratar na cláusula Where.

Vou dar esse assunto como encerrado, como eu sou novo aqui eu tenho que fechar o assunto? Caso sim como faço?


Bom dia!
Como preferir Dagoberto!
Estava com a a página desatualizada e não vi tua resposta, por isso postei o ultimo comentário...
São os usuários moderadores e administradores que encerram os tópicos.
Responder

Gostei + 0

18/12/2014

Dagoberto Neto

Legal, nem sei como agradecer todos vocês, obrigado mesmo...
Responder

Gostei + 0

18/12/2014

Marisiana Battistella

Por nada Dagoberto!!
Se você optar por modificar o seu SELECT e adaptar a estrutura que postei como exemplo, posso te ajudar...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar