- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por
edgf.
-
AutorPosts
-
22 de fevereiro de 2010 às 5:25 pm #92731
edgf
ParticipantePrezados membros do Fórum bom dia!
Estou com um “pequeno”problema e não consegui encontrar solução.
Tenho uma tabela que trabalha com dois campos:
FATOPERACAO e FATOPERACAO_ORIGINAL
Esses campos servem para definir quando uma mercadoria é devolvida.
O processo funciona da seguinte forma:
Sempre que uma compra é feita, e é gerado uma nota fiscal de saida, essa venda recebe um numero de FATOPERACAO, no entanto quando uma mercadoria é devolvida é feito uma nota de entrada com um outro tipo de transacao com o campo FATOPERACAO_ORIGINAL = FATOPERACAO da venda, dessa forma qdo verifico que o FATOPERACAO_ORIGINAL existe NA FATOPERACAO, eu sei que aquela nota da FATOPERACAO FOI DEVOLVIDA e não trago esse registro (pelo menos era assim que era para funcionar).
Eu consegui montar a query tal qual abaixo que tras os devolvidos certinho.
SELECT
CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL,
CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO,
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO,
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINALFROM CNP.FAT_MOVIMENTO_CAPA
WHERE
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO IN (SELECT CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL FROM CNP.FAT_MOVIMENTO_CAPA ) ANDCNP.FAT_MOVIMENTO_CAPA.DTA_DOCUMENTO >= ’01-JAN-2010′ AND
CNP.FAT_MOVIMENTO_CAPA.DTA_DOCUMENTO < '01-FEB-2010' AND --CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL = '7772' AND CNP.FAT_MOVIMENTO_CAPA.SERIE_NOTA_FISCAL IN ('4', '900') AND CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO IN ('P21', 'P23', 'P24', 'O21', 'O23','O24', 'G21', 'P07', 'O26' ) AND CNP.FAT_MOVIMENTO_CAPA.DTA_CANCELAMENTO_NOTA IS NULL Mas qdo tento fazer o inverso e trazer apenas os que não foram devolvidos eu troco o IN por NOT IN e todos os registros vem vazios. Espero que alguém possa me ajudar. Obrigado. Emerson22 de fevereiro de 2010 às 9:32 pm #92737burga
ParticipanteFaça o seguinte, execute esta consulta e veja se traz os registros como deve:
SELECT
CNP.FAT_MOVIMENTO_CAPA.NUMERO_NOTA_FISCAL,
CNP.FAT_MOVIMENTO_CAPA.TIPO_TRANSACAO,
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO,
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
FROM
CNP.FAT_MOVIMENTO_CAPA
WHERE
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO NOT IN (
SELECT
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
FROM
CNP.FAT_MOVIMENTO_CAPA );Depois você vai acrescentando o restante das condições uma a uma e verificando se está trazendo corretamente os registros. Pois o erro não parece estar na parte do NOT IN.
Outra coisa, acho que você ja deve ter feito isto, é verificar se realmente deve retornal algum registro nesta consulta com o NOT IN… Se ainda assim não encontrar erros, é bom rever as regras de negócios do seu sistema, se é isto mesmo que você passou aqui no fórum.
22 de fevereiro de 2010 às 10:04 pm #92739edgf
ParticipantePuxa eu fiz os testes solicitados mas infelizmente não me trouxe registros nenhum.
Com relação a outra observação postada.., realmente existem registros para serem buscados.
De qqer forma ainda penso que para esse caso tavez o NOT IN não seja a melhor função a utilizar.
Bom eu consegui resolver meu problema na programação do sistema, (gambiarra – faz parte ‘rs’).
Obrigado pela ajuda!
23 de fevereiro de 2010 às 2:48 am #92743burga
ParticipanteAgora me veio à cabeça… Apesar de você já ter resolvido seu problema, o erro provavelmente está porque você não elimina CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL nulos em sua subquery…
O correto seria na subquery do NOT IN você colocar a condição CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL IS NOT NULL:
SELECT
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL
FROM
CNP.FAT_MOVIMENTO_CAPA
WHERE
CNP.FAT_MOVIMENTO_CAPA.FATOPERACAO_ORIGINAL IS NOT NULLDesculpa não ter visto isso antes… rs!
23 de fevereiro de 2010 às 2:55 pm #92744edgf
ParticipantePuxa valeu pela dica!
Funcô mesmo…, obrigado!!!!!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.