Boa Tarde Pessoal
Tenho um código aqui que me retorna duas linhas. Iguais em parte
Um é saída do estoque e outra retorno.
Pedi pra sair 30 produtos. E retornei 15. No meu relatorio preciso que saia somente o total daqueles que sairam.
OU seja somente 15. COmo eu poderia fazer isso. Não tenho ideia como
Aguardo respostas
Como fazer calculos, com condições
-
- Rank: Estagiário Sênior
- Mensagens: 12
- Registrado em: Ter, 19 Abr 2011 10:24 am
- Localização: São paulo - SP
JImmy
deixa eu ver se entendi
você pediu pra sair 30 produtos e retornou 15. Você quer o total dos que não retornaram, que no caso é 15?
você pediu pra sair 30 produtos e retornou 15. Você quer o total dos que não retornaram, que no caso é 15?
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Exatamente isso
um exemplo do meu codigo
um exemplo do meu codigo
(select me.nr_solicitacao, me.dt_movto, me.cd_estado, me.tp_movto, me.qt_movto
from movto_est_medicamento me
where me.cd_estado
and me.dt_movto between '14/07/2011' and '14/07/2011')
-
- Rank: Estagiário Sênior
- Mensagens: 12
- Registrado em: Ter, 19 Abr 2011 10:24 am
- Localização: São paulo - SP
JImmy
Algum desses campos serve de parâmetro pra saber o que saiu e o que retornou? Ex. o que retornou grava com um 'R'.
Nesse select, o range '14/07/2011' - '14/07/2011' é dos produtos que saíram?
Nesse select, o range '14/07/2011' - '14/07/2011' é dos produtos que saíram?
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Não. Ele traz tudo.
Tudo que saiu. POrém ele faz uma copia do que foi retornado também. QUando faço retorno ele não atualiza e sim cria outra linha.
Essa data deveria trazer todos produtor que foram fornecidos.
Ou seja,
Se retornou 15, deveria retornar 15.
sairam 30
Não sei se deu pra entender
Tudo que saiu. POrém ele faz uma copia do que foi retornado também. QUando faço retorno ele não atualiza e sim cria outra linha.
Essa data deveria trazer todos produtor que foram fornecidos.
Ou seja,
Se retornou 15, deveria retornar 15.
sairam 30
Não sei se deu pra entender
-
- Rank: Estagiário Sênior
- Mensagens: 12
- Registrado em: Ter, 19 Abr 2011 10:24 am
- Localização: São paulo - SP
JImmy
então, deixa eu ver se esse exemplo se encaixa
no intervalo '14/07/2011' - '14/07/2011' você pediu pra listar todos os produtos que sairam, certo? No total, sairam 15 produtos. No select, deveria retornar 15. Porém, quando você registra o retorno, ele grava uma outra linha. Então, ao invés de retornar 15, retorna 30. É isso Pri?
no intervalo '14/07/2011' - '14/07/2011' você pediu pra listar todos os produtos que sairam, certo? No total, sairam 15 produtos. No select, deveria retornar 15. Porém, quando você registra o retorno, ele grava uma outra linha. Então, ao invés de retornar 15, retorna 30. É isso Pri?
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
alguém pode me ajudar ai
Consegui agora fazer
faz o que eu quero. Porem não retorna nada quando tiver somente S.
alguém pode me dar uma luz.;....
Consegui agora fazer
sum(decode(m.tp_movto,'S',m.qt_servico)) - sum(decode(m.tp_movto,'R',m.qt_servico))
alguém pode me dar uma luz.;....
-
- Rank: Programador Sênior
- Mensagens: 45
- Registrado em: Qui, 12 Mai 2011 4:54 pm
- Localização: Porto Alegre - RS
HEHEHEHE
Que esculhambação....
A Priscila mal conseguiu explicar o seu problema.
A pergunta principal aqui é: como que tu sabe que um produto retornou? Existe algum campo que te diz isso? Que tabela é essa que tu está consultando?
Que esculhambação....
A Priscila mal conseguiu explicar o seu problema.
A pergunta principal aqui é: como que tu sabe que um produto retornou? Existe algum campo que te diz isso? Que tabela é essa que tu está consultando?
-
- Rank: Programador Sênior
- Mensagens: 45
- Registrado em: Qui, 12 Mai 2011 4:54 pm
- Localização: Porto Alegre - RS
Então, tu deve ta olhando os registros em uma tabela de HISTÓRICO de movimentações, certo?QUando faço retorno ele não atualiza e sim cria outra linha
Cada vez que entra ou saem produtos, fica registrado o que foi movimentado, certo?
Tipo assim:
cod_prod nome_prod qt_movimentada dt_movimentada tp_movimento
123 produto ABC 30 14/07/2011 Saida
123 produto ABC 15 14/07/2001 Retorno
A partir dai, tu precisa ler os registros e deduzir que tem 15 produtos que não voltaram, certo?
-
- Rank: Programador Sênior
- Mensagens: 45
- Registrado em: Qui, 12 Mai 2011 4:54 pm
- Localização: Porto Alegre - RS
Então, segue pelo caminho que tu está indo que é o certo.
Usa o SUM( DECODE(....) ) como você está utilizando, e depois bota um GROUP BY nos campos principais: cod_produto, nome_prod, dt_movimento, etc...
Isso deve funcionar. Senão funcionar, avisa.
Usa o SUM( DECODE(....) ) como você está utilizando, e depois bota um GROUP BY nos campos principais: cod_produto, nome_prod, dt_movimento, etc...
Isso deve funcionar. Senão funcionar, avisa.
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Dae Marcus
Olha so
Não funcionou não
Ele ainda retorna as duas linhas normais. O resultado do sum da. Saida 20 e depois o retorno -15. Onde o resultado deveria ser 5
Olha so
Não funcionou não
select sum(decode(m.tp_movto,'S',m.qt_servico,0)) - sum(decode(m.tp_movto,'R',m.qt_servico,0))testesa, m.dt_movto, m.nr_solicitacao, pj.nm_entidade,
s.ds_servico, m.qt_servico, m.dt_validade,
m.cd_lote, pfabr.nm_fantasia, m.fg_ddu
from solicitacao_medicamento sm,
movto_est_medicamento m,
item_solicitacao_medicamento i,
pessoa_juridica pj,
servicos s,
pessoa_juridica pfabr
where m.dt_movto between '14/07/2011' and '14/07/2011'
and sm.nr_solicitacao = m.nr_solicitacao
and sm.nr_solicitacao = i.nr_solicitacao
and i.cd_servico = m.cd_servico
and sm.cd_entidade_solicitacao = pj.id_pessoajuridica
and i.cd_servico = s.cd_servico
and m.cd_fabricante = pfabr.id_pessoajuridica(+)
group by m.cd_lote,m.dt_movto, m.nr_solicitacao, pj.nm_entidade,
s.ds_servico, m.qt_servico, m.dt_validade,
pfabr.nm_fantasia, m.fg_ddu
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Posta as duas linhas do resultado para avaliação...
-
- Rank: DBA Pleno
- Mensagens: 297
- Registrado em: Ter, 21 Dez 2010 8:45 am
- Localização: Florianopolis
Priscila Fernandes
Outro detalhe se eu tirar os itens do select e deixa somente o sum e outro cd_lote. Ele retorna uma linha como eu quero. Porém preciso deixar esses itens. Será que existe outra forma.
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
O problema é o seguinte, você tem um agrupador pelo serviço, considerando que existem 2 serviços diferentes, um saída e um retorno, não tem como agrupar desta forma.
A solução é reescrever toda a consulta. Vou ver se monto um exemplo para você.
A solução é reescrever toda a consulta. Vou ver se monto um exemplo para você.
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Faltam algumas informações..
- Como identificar a qual solicitação se refere o retorno? O movimento do tipo 'R' é gerado sempre com o mesmo número de solicitação de saída?
- Pode haver mais de um retorno para uma mesma saída?
- A data do movimento de retorno pode ser diferente da data de saída? Caso afirmativo, você deve considerar a data do movimento de retorno?
Por exemplo:
Dia 01 é gerada uma saída de 10 unidades.
Dia 02 é gerado o retorno de 02 unidades.
Dia 03 é gerado o retorno de 08 unidades.
Gerando o relatório do dia 01 ao dia 02, deve retornar 08 unidades? Ou deverá considerar o movimento do dia 03 também, retornando 0?
Considerando que o número da solicitação seja a forma de agrupar os registros de saída e retorno, e que devem ser considerados apenas os movimentos limitados ao intervalo das datas informadas como parâmetro:
- Como identificar a qual solicitação se refere o retorno? O movimento do tipo 'R' é gerado sempre com o mesmo número de solicitação de saída?
- Pode haver mais de um retorno para uma mesma saída?
- A data do movimento de retorno pode ser diferente da data de saída? Caso afirmativo, você deve considerar a data do movimento de retorno?
Por exemplo:
Dia 01 é gerada uma saída de 10 unidades.
Dia 02 é gerado o retorno de 02 unidades.
Dia 03 é gerado o retorno de 08 unidades.
Gerando o relatório do dia 01 ao dia 02, deve retornar 08 unidades? Ou deverá considerar o movimento do dia 03 também, retornando 0?
Considerando que o número da solicitação seja a forma de agrupar os registros de saída e retorno, e que devem ser considerados apenas os movimentos limitados ao intervalo das datas informadas como parâmetro:
select *
from
(
select sum( decode( tp_movto, 'S', 1, 'R', -1, 0 ) * qt_servico ) over ( partition by nr_solicitacao ) qt_movimentada
, dt_movto
, nr_solicitacao
, nm_entidade
, tp_movto
from
(
-- Apenas para simular alguns registros
select 20 qt_servico
, to_date('14/07/2011', 'dd/mm/yyyy') dt_movto
, 3 nr_solicitacao
, 'HOSPITAL LIOFILIZADO FATOR VIII - 250 UI' nm_entidade
, 'S' tp_movto
from dual
union all
select 5 qt_servico
, to_date('14/07/2011', 'dd/mm/yyyy') dt_movto
, 3 nr_solicitacao
, 'HOSPITAL LIOFILIZADO FATOR VIII - 250 UI' nm_entidade
, 'R' tp_movto
from dual
union all
select 2 qt_servico
, to_date('17/07/2011', 'dd/mm/yyyy') dt_movto
, 3 nr_solicitacao
, 'HOSPITAL LIOFILIZADO FATOR VIII - 250 UI' nm_entidade
, 'R' tp_movto
from dual
union all
select 10 qt_servico
, to_date('15/07/2011', 'dd/mm/yyyy') dt_movto
, 4 nr_solicitacao
, 'TESTE' nm_entidade
, 'S' tp_movto
from dual
--
) a
where dt_movto between to_date('14/07/2011', 'dd/mm/yyyy') and to_date('19/07/2011', 'dd/mm/yyyy')
) a
where a.tp_movto = 'S'
and a.qt_movimentada >= 0 -- Se houver retorno de todos os itens movimentados, exibir a linha?
-- E se a quantidade retornada for maior do que a quantidade registrada na saída?
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes