Usuário com melhor resposta
Query trazendo registros fora da condição

Pergunta
-
Bom dia,
Galera!
Gostaria de uma ajuda, Estou desenvolvendo uma query porém a mesma está trazendo vários registros fora da condição do Exists, nesta query preciso que traga todos os registros onde a existis um lançamento com o código 60.13.005
SELECT PDF.DocFinChv As 'Chave' , PDF.MovCtrlBancNum As 'Num_Mov', PDF.EntCod As 'Cod_Ent', PDF.ParcDocFinEntNome As 'Nome_Entidade', PDF.ParcDocFinTipoLanc As 'Tipo', PDF.ParcDocFinDupNum As 'Documento', PDF.ParcDocFinDataVenc As 'Data_Venc', PDF.ParcDocFinDataPag As 'Data_Pag', PDF.ParcDocFinValOrig As 'Valor_Orig', PDF.ParcDocFinValPag As 'Valor_Pago', PDF.ParcDocFinObs As 'Obs.' , 'Dias' = DATEDIFF(DAY, PDF.ParcDocFinDataPag ,PDF.ParcDocFinDataVenc) FROM PARC_DOC_FIN PDF WITH(NOLOCK) WHERE PDF.ParcDocFinDataPag BETWEEN '20161001' AND '20161028' AND EXISTS (SELECT * FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH(NOLOCK) WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' )
Respostas
-
Boa tarde,
Acho que é possível obter o resultado esperado com a query abaixo (sem a procedure):
with CTE_PDF as ( SELECT PDF.MovCtrlBancNum FROM PARC_DOC_FIN PDF WITH(NOLOCK) WHERE PDF.ParcDocFinDataPag BETWEEN @DataInicial AND @DataInicial AND EXISTS (SELECT * FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH(NOLOCK) WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' And PDF.DocFinChv = DFCRD.DocFinChv) ) SELECT PDF1.DocFinChv As 'Chave' , PDF1.MovCtrlBancNum As 'Num_Mov', PDF1.EntCod As 'Cod_Ent', PDF1.ParcDocFinEntNome As 'Nome_Entidade', PDF1.ParcDocFinTipoLanc As 'Tipo', PDF1.ParcDocFinDupNum As 'Documento', PDF1.ParcDocFinDataVenc As 'Data_Venc', PDF1.ParcDocFinDataPag As 'Data_Pag', PDF1.ParcDocFinValOrig As 'Valor_Orig', PDF1.ParcDocFinValPag As 'Valor_Pago', PDF1.ParcDocFinObs As 'Obs.' , 'Dias' = DATEDIFF(DAY, PDF1.ParcDocFinDataPag ,PDF1.ParcDocFinDataVenc) FROM CTE_PDF as PDF INNER JOIN PARC_DOC_FIN PDF1 WITH(NOLOCK) ON PDF1.MovCtrlBancNum = PDF.MovCtrlBancNum
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Leandro Massena Moraes segunda-feira, 31 de outubro de 2016 09:48
Todas as Respostas
-
Leandro,
Você precisa de uma condição no seu EXISTS que associe o resultset da query principal a ele, como uma FK, por exemplo.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Analisando sua query , vc tem dois conjuntos DISJUNTOS
Existe um elo de ligação entre PARC_DOC_FIN e DOC_FIN_CLASSE_REC_DESP ??
se sim use Joins
se não existe um campo na tabela PARC_DOC_FIN com o valor '60.13.005'
se sim faça algo semelante a isso
SELECT PDF.DocFinChv AS 'Chave' , PDF.MovCtrlBancNum AS 'Num_Mov' , PDF.EntCod AS 'Cod_Ent' , PDF.ParcDocFinEntNome AS 'Nome_Entidade' , PDF.ParcDocFinTipoLanc AS 'Tipo' , PDF.ParcDocFinDupNum AS 'Documento' , PDF.ParcDocFinDataVenc AS 'Data_Venc' , PDF.ParcDocFinDataPag AS 'Data_Pag' , PDF.ParcDocFinValOrig AS 'Valor_Orig' , PDF.ParcDocFinValPag AS 'Valor_Pago' , PDF.ParcDocFinObs AS 'Obs.' , 'Dias' = DATEDIFF(DAY, PDF.ParcDocFinDataPag, PDF.ParcDocFinDataVenc) FROM PARC_DOC_FIN PDF WITH ( NOLOCK ) WHERE PDF.ParcDocFinDataPag BETWEEN '20161001' AND '20161028' AND EXISTS ( SELECT TOP 1 1 FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH ( NOLOCK ) JOIN PARC_DOC_FIN ON DFCRD.PKTabela = PARC_DOC_FIN.FKTabela WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' );
Wesley Neves
- Editado Wesley Neves sexta-feira, 28 de outubro de 2016 12:34 Correção
-
Existe somente um campo FK porém se eu usar este campo da forma descrita acima somente vai trazer o registro que vincula as duas tabelas, preciso que traga todos os registros da tabela PARC_DOC_FIN desde que na tabela DOC_FIN_CLASSE_REC_DESP esteja com a condição 60.13.005
-
-
-
-
Bom dia,
Leandro, experimente deixar o Exists da seguinte forma:
AND EXISTS (SELECT 1 FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH(NOLOCK) WHERE DFCRD.DocFinChv = PDF.DocFinChv AND DFCRD.CLASSERECDESPCODESTR = '60.13.005' )
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Então Eu desconheço qualquer forma de vc unir dois conjuntos ,se eles não tiverem um elo de ligação
Vc rodou a query que te passei com essa modificação
WHERE DFCRD.DocFinChv = PDF.DocFinChv AND DFCRD.CLASSERECDESPCODESTR = '60.13.005' )
Eu acredito que seria o correto
Wesley Neves
-
-
Não entendi muito bem... o que você quer dizer com o trecho abaixo?
... "traga todos registros do lançamento da tabela PARC_DOC_FIM"
Assinatura: http://www.imoveisemexposicao.com.br
-
Veja isso
1) Nesse primeiro exemplo vc trás todos os registros da tabela PARC_DOC_FIN que tenha o codigo 60.13.005
SELECT PDF.DocFinChv AS 'Chave' ,
PDF.MovCtrlBancNum AS 'Num_Mov' ,
PDF.EntCod AS 'Cod_Ent' ,
PDF.ParcDocFinEntNome AS 'Nome_Entidade' ,
PDF.ParcDocFinTipoLanc AS 'Tipo' ,
PDF.ParcDocFinDupNum AS 'Documento' ,
PDF.ParcDocFinDataVenc AS 'Data_Venc' ,
PDF.ParcDocFinDataPag AS 'Data_Pag' ,
PDF.ParcDocFinValOrig AS 'Valor_Orig' ,
PDF.ParcDocFinValPag AS 'Valor_Pago' ,
PDF.ParcDocFinObs AS 'Obs.' ,
'Dias' = DATEDIFF(DAY, PDF.ParcDocFinDataPag, PDF.ParcDocFinDataVenc)
FROM PARC_DOC_FIN PDF WITH ( NOLOCK )
WHERE PDF.ParcDocFinDataPag BETWEEN '20161001'
AND '20161028'
AND pdf.DocFinChv IN ( SELECT DFCRD.DocFinChv
FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH ( NOLOCK )
WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' );
)Wesley Neves
-
Gapimex Boa tarde,
Realmente sem o campo chave para ligar as tabelas não tem como trazer os registros corretos, resolvi mudar o código e criar uma procedure criando uma tabela temp para gerar os registros da primeira movimentação,nesta tabela temporária tem um campo MovCtrlBancNum que a partir dela consigo vincular com o segundo select, será que consegue me ajudar, se eu crio a tabela primeiro e depois faço o vinculo traz o resultado esperado mas quando faço na procedure não traz os registros, consegue identificar o que estou fazendo de errado
abs,
GO /****** Object: StoredProcedure [dbo].[USERRel_Antecipacao] Script Date: 10/28/2016 14:34:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[USERRel_Antecipacao] @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN /*Verificando se existe a table temporária global ##CarregaDados. Se existir iremos dropa-la*/ If exists (Select 1 From tempdb.dbo.sysobjects where id = OBJECT_ID('tempdb..[##GeraDados]')) Drop table ##GeraDados SELECT PDF.DocFinChv , PDF.MovCtrlBancNum , PDF.EntCod , PDF.ParcDocFinEntNome, PDF.ParcDocFinTipoLanc, PDF.ParcDocFinDupNum, PDF.ParcDocFinDataVenc, PDF.ParcDocFinDataPag, PDF.ParcDocFinValOrig, PDF.ParcDocFinValPag, PDF.ParcDocFinObs, 'Dias' = DATEDIFF(DAY, PDF.ParcDocFinDataPag ,PDF.ParcDocFinDataVenc) INTO ##GeraDados FROM PARC_DOC_FIN PDF WITH(NOLOCK) WHERE PDF.ParcDocFinDataPag BETWEEN @DataInicial AND @DataInicial AND EXISTS (SELECT * FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH(NOLOCK) WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' And PDF.DocFinChv = DFCRD.DocFinChv ) SELECT PDF1.DocFinChv As 'Chave' , PDF1.MovCtrlBancNum As 'Num_Mov', PDF1.EntCod As 'Cod_Ent', PDF1.ParcDocFinEntNome As 'Nome_Entidade', PDF1.ParcDocFinTipoLanc As 'Tipo', PDF1.ParcDocFinDupNum As 'Documento', PDF1.ParcDocFinDataVenc As 'Data_Venc', PDF1.ParcDocFinDataPag As 'Data_Pag', PDF1.ParcDocFinValOrig As 'Valor_Orig', PDF1.ParcDocFinValPag As 'Valor_Pago', PDF1.ParcDocFinObs As 'Obs.' , 'Dias' = DATEDIFF(DAY, PDF1.ParcDocFinDataPag ,PDF1.ParcDocFinDataVenc) FROM PARC_DOC_FIN PDF1 WITH(NOLOCK), ##GeraDados WITH(NOLOCK) WHERE ##GeraDados.MovCtrlBancNum = PDF1.MovCtrlBancNum End
-
Boa tarde,
Acho que é possível obter o resultado esperado com a query abaixo (sem a procedure):
with CTE_PDF as ( SELECT PDF.MovCtrlBancNum FROM PARC_DOC_FIN PDF WITH(NOLOCK) WHERE PDF.ParcDocFinDataPag BETWEEN @DataInicial AND @DataInicial AND EXISTS (SELECT * FROM DOC_FIN_CLASSE_REC_DESP DFCRD WITH(NOLOCK) WHERE DFCRD.CLASSERECDESPCODESTR = '60.13.005' And PDF.DocFinChv = DFCRD.DocFinChv) ) SELECT PDF1.DocFinChv As 'Chave' , PDF1.MovCtrlBancNum As 'Num_Mov', PDF1.EntCod As 'Cod_Ent', PDF1.ParcDocFinEntNome As 'Nome_Entidade', PDF1.ParcDocFinTipoLanc As 'Tipo', PDF1.ParcDocFinDupNum As 'Documento', PDF1.ParcDocFinDataVenc As 'Data_Venc', PDF1.ParcDocFinDataPag As 'Data_Pag', PDF1.ParcDocFinValOrig As 'Valor_Orig', PDF1.ParcDocFinValPag As 'Valor_Pago', PDF1.ParcDocFinObs As 'Obs.' , 'Dias' = DATEDIFF(DAY, PDF1.ParcDocFinDataPag ,PDF1.ParcDocFinDataVenc) FROM CTE_PDF as PDF INNER JOIN PARC_DOC_FIN PDF1 WITH(NOLOCK) ON PDF1.MovCtrlBancNum = PDF.MovCtrlBancNum
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Leandro Massena Moraes segunda-feira, 31 de outubro de 2016 09:48
-