- Este tópico contém 24 respostas, 3 vozes e foi atualizado pela última vez 11 anos, 1 mês atrás por rman.
-
AutorPosts
-
5 de outubro de 2013 às 12:10 am #105955PAULO HENRIQUEParticipante
@RMAN
ESTÁ CERTÍSSIMO, EXATAMENTE ISSO QUE QUERIA.
ESTOU MUITO SATISFEITO COM SUA AJUDA E TAMBÉM DO OUTRO AMIGO ANDREI.
PARABÉNS PELO CONHECIMENTO DE VOCÊS, CHEGAREI LÁ..RSNÃO QUERENDO ABUSAR MAS COMO FICARIA PARA DUAS TABELAS.
EXEMPLO:
FAT_MOVIMENTO_ITEM E FAT_MOVIMENTO_CAPA O ÚNICO CAMPO EM COMUM NAS DUAS TABELAS É O NUMERO_NOTA_FISCAL
SELECT *
FROM FAT_MOVIMENTO_ITEM A
WHERE A.ITEM_ESTOQUE = 31025
AND EXISTS ( select A.Item_Estoque from fat_movimento_capa C
where C.dta_entrada_saida between to_date(’12/08/2013′,’dd/mm/yyyy’)
and to_date(’12/08/2013′,’dd/mm/yyyy’)
and C.Status = ‘F’
and C.revenda = 1
and A.Numero_Nota_Fiscal = C.NUMERO_NOTA_FISCAL
and C.Tipo_Transacao = ‘P01’
)PORÉM O ÚNICO CRITÉRIO QUE ELE ESTÁ ACEITANDO É ESSE “and A.Numero_Nota_Fiscal = C.NUMERO_NOTA_FISCAL” , OUTROS COMO “and C.Status = ‘F'” , ‘and C.Tipo_Transacao = ‘P01′” , “and C.revenda = 1” ELE ESTÁ IGNORANDO. COMO PODERIA RESOLVER ISSO?
PROMETO QUE É A ULTIMA DÚVIDA.
Mais uma Vez obrigado
7 de outubro de 2013 às 3:43 pm #105959rmanParticipante@cardoso_ph
Como assim ignorando?
Execute o SELECT:
select A.Item_Estoque from fat_movimento_capa C
where C.dta_entrada_saida between to_date('12/08/2013','dd/mm/yyyy')
and to_date('12/08/2013','dd/mm/yyyy')
and C.Status = 'F'
and C.revenda = 1
and C.NUMERO_NOTA_FISCAL = 31025
and C.Tipo_Transacao = 'P01'
Retornou algum resultado?
7 de outubro de 2013 às 4:06 pm #105961PAULO HENRIQUEParticipante@RMAN,
Então com esse select
SELECT *
FROM FAT_MOVIMENTO_ITEM A
WHERE A.ITEM_ESTOQUE = 31025
AND EXISTS ( select A.Item_Estoque from fat_movimento_capa C
where C.dta_entrada_saida between to_date(’12/08/2013′,’dd/mm/yyyy’)
and to_date(’12/08/2013′,’dd/mm/yyyy’)
and C.Status = ‘F’
and C.revenda = 1
and A.Numero_Nota_Fiscal = C.NUMERO_NOTA_FISCAL
and C.Tipo_Transacao = ‘P01’
)Eu consigo visualizar as notas do dia 12/08 com esse item 31025 , porém não estou conseguindo filtrar pelo status de ‘F’ , ele está trazendo duas notas, uma com Status ‘A’ e outra com Status ‘F’. Correto seria trazer somente a nota que tiver esse item, no dia 12/08 , com transação ‘P01’ que esteja com status de ‘F’fechada.
o campo Status,data,Numero de nota,Tipo de transação fazem parte da tabela fat_movimento_capa.
O campo Numero de nota, tipo de transação,item fazem parte da outra tabela fat_movimento_item.Obrigado Pela Ajuda.
7 de outubro de 2013 às 5:37 pm #105964rmanParticipante@cardoso_ph
Neste caso EXITS não é saída. Só para você entender porque está sendo ignorado os filtros. O SELECT está trazendo o FAT_MOVIMENTO que possuí o ITEM_ESTOQUE = 31025 e que possuí um relacionamento com FAT_MOVIMENTO_CAPA, mais os filtros especificado, ou seja, se tiver pelo menos 1 registro em FAT_MOVIMENTO_CAPA que satisfaz os filtros internos, vai trazer o ITEM_ESTOQUE = 31025 da tabela FAT_MOVIMENTO_ITEM.
Faça assim:
SELECT *
FROM FAT_MOVIMENTO_ITEM A
INNER JOIN fat_movimento_capa C on C.NUMERO_NOTA_FISCAL = A.Numero_Nota_Fiscal
WHERE A.ITEM_ESTOQUE = 31025
AND C.dta_entrada_saida between to_date('12/08/2013','dd/mm/yyyy') and to_date('12/08/2013','dd/mm/yyyy')
and C.Status = 'F'
and C.revenda = 1
and C.Tipo_Transacao = 'P01'
7 de outubro de 2013 às 5:59 pm #105969PAULO HENRIQUEParticipante@RMAN
Inseri um anexo nesse post com minha tela, na tela você verá que o select de baixo, mostra as duas notas, mesmo colocando o filtro em questão continua aparecendo, é como se não estivesse filtrando corretamente.
Veja se consegue visualizar.
Obrigado
Attachments:7 de outubro de 2013 às 6:11 pm #105971rmanParticipante@cardoso_ph
Creio que faltou filtrar a nota fiscal, você filtrou apenas o item, provavelmente, está trazendo 2 itens de notas distintas.
7 de outubro de 2013 às 6:38 pm #105972PAULO HENRIQUEParticipante@Rman,
Igualei os campos de Serie de nota, e consegui trazer somente a nota em questão .
Exemplo:
…..
and C.Serie_Nota_Fiscal = A.Serie_Nota_FiscalAgora, como ficaria o update para esse caso.
update FAT_MOVIMENTO_ITEM A
set A.Base_Pis = 0
[b]????????
[/b]INNER JOIN fat_movimento_capa C on C.NUMERO_NOTA_FISCAL = A.Numero_Nota_Fiscal
WHERE A.ITEM_ESTOQUE = 31025
AND C.dta_entrada_saida between to_date(’12/08/2013′,’dd/mm/yyyy’) and to_date(’12/08/2013′,’dd/mm/yyyy’)
and C.status = ‘F’
and C.revenda = 1
and C.Tipo_Transacao = ‘P01’
and C.Serie_Nota_Fiscal = A.Serie_Nota_Fiscal7 de outubro de 2013 às 7:28 pm #105973rmanParticipante@cardoso_ph
Bom, ficou falando uma ligação, infelizmente no oracle não da pra fazer INNER JOIN no UPDATE, apenas no SELECT. Então voltamos para o EXISTS. Agora com todas as ligações.
SELECT *
FROM FAT_MOVIMENTO_ITEM A
WHERE A.ITEM_ESTOQUE = 31025
AND EXISTS (
select 1
from fat_movimento_capa C
where C.Serie_Nota_Fiscal = A.Serie_Nota_Fiscal
and C.NUMERO_NOTA_FISCAL = A.Numero_Nota_Fiscal
C.dta_entrada_saida between to_date('12/08/2013','dd/mm/yyyy')
and to_date('12/08/2013','dd/mm/yyyy')
and C.Status = 'F'
and C.revenda = 1
and C.Tipo_Transacao = 'P01'
)
update FAT_MOVIMENTO_ITEM A
set A.Base_Pis = 0
WHERE A.ITEM_ESTOQUE = 31025
AND EXISTS (
select 1
from fat_movimento_capa C
where C.Serie_Nota_Fiscal = A.Serie_Nota_Fiscal
and C.NUMERO_NOTA_FISCAL = A.Numero_Nota_Fiscal
C.dta_entrada_saida between to_date('12/08/2013','dd/mm/yyyy')
and to_date('12/08/2013','dd/mm/yyyy')
and C.Status = 'F'
and C.revenda = 1
and C.Tipo_Transacao = 'P01'
)
7 de outubro de 2013 às 9:56 pm #105975PAULO HENRIQUEParticipante@Rman
Só tenho a agradecer, Parabéns pelo seu conhecimento.
Como que valido sua resposta como correta aqui no fórum?
Hoje estou com poucas movimentações, mas quando aumentar a demanda, vou procurar como fazer esses selects que me passou um dentro do outro. Porque seria melhor, mais automático,
Muito obrigado.
8 de outubro de 2013 às 3:47 pm #105982rmanParticipante@cardoso_ph
Creio que não tem esse recurso de sinalizar a resposta correta.
-
AutorPosts
- Você deve fazer login para responder a este tópico.