none
Query trazendo informações divergentes RRS feed

  • Pergunta

  • Olá, tenho uma query que preciso trazer os valores de impostos de uma nota fiscal.

    Porém ao invés de trazer separado por (PIS, COFINS, INSS, ISS, etc), o valor da coluna está somando tudo, mesmo eu informando o id do "tipo de imposto" na coluna coluna WTTypeId da tabela PCH5.

    Minha dúvida é, como calculo os valores de forma correta para essas cada tipo de imposto? (ID de 1 a 6)

    Exemplo: PIS era pra trazer no relatório R$19,89, porém está trazendo R$159,12.

    Agradeço a ajuda!

    SELECT 
    	'Tomado'	AS 'Tipo',
    	CONVERT(NVARCHAR(200), T3.[AliasName])	AS 'Filial',
    	T11.[DocDate]	AS 'Pgto',
    	T0.[DocNum]	AS 'Documento',
    	T0.[TaxDate]	AS 'Data Documento',
            T0.[DocDate]    AS 'Lançamento',
    	T0.[Serial]	AS 'Nota',
    	T0.[CardName]	AS 'Parceiro',
    	T2.[TaxId0]	AS 'CNPJ',
    	T15.[IndName]	AS 'Tipo Tributação',
    	T2.[State]	AS 'Estado',
    	CASE
    		WHEN T0.[BaseAmnt] > 0 THEN T0.[BaseAmnt]
    		ELSE T0.[Max1099]
    	END				AS 'ValorBruto',
    	SUM (T4.[WtAmnt])	AS 'PIS',
    	SUM (T5.[WtAmnt])	AS 'COFINS',
    	SUM (T6.[WtAmnt])	AS 'IRRF',
    	SUM (T7.[WtAmnt])	AS 'CSLL',
    	SUM (T8.[WtAmnt])	AS 'INSS',
    	SUM (T9.[WtAmnt])	AS 'ISS',
    	T0.[DocTotal]	        AS 'ValorLiquido'
    
    FROM
    	[dbo].[OPCH] T0
    	INNER JOIN [dbo].[OFPR]   T1 ON T0.FinncPriod = T1.AbsEntry 
    	INNER JOIN [dbo].[PCH12]  T2 ON T0.DocEntry = T2.DocEntry AND T0.Model IN ('46','57','25','21','75','23')
    	INNER JOIN [dbo].[OBPL]   T3 ON T0.BPLId = T3.BPLId
    	LEFT JOIN [dbo].[PCH5]    T4 ON T4.AbsEntry = T0.DocEntry AND T4.WTTypeId = 1 AND T4.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[PCH5]   T5 ON T0.DocEntry = T5.AbsEntry AND T5.WTTypeId = 2 AND T5.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[PCH5]   T6 ON T0.DocEntry = T6.AbsEntry AND T6.WTTypeId = 3 AND T6.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[PCH5]   T7 ON T0.DocEntry = T7.AbsEntry AND T7.WTTypeId = 4 AND T7.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[PCH5]   T8 ON T0.DocEntry = T8.AbsEntry AND T8.WTTypeId = 5 AND T8.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[PCH5]   T9 ON T9.AbsEntry = T0.DocEntry AND T9.WTTypeId = 6 AND T9.[WtAmnt] <> 0
    	LEFT  JOIN [dbo].[VPM2]  T10 ON T0.DocEntry = T10.DocEntry AND T10.InvType = 13
    	LEFT  JOIN [dbo].[OVPM]  T11 ON T10.DocEntry = T11.DocEntry AND T11.Canceled = 'N'
    	LEFT  JOIN [dbo].[OFPR]  T12 ON T11.FinncPriod = T12.AbsEntry
            LEFT  JOIN [dbo].[PCH12] T13 ON T13.DocEntry = T0.DocEntry
            LEFT  JOIN [dbo].[OCRD]  T14 ON T0.CardCode = T14.CardCode
    	LEFT  JOIN [dbo].[OOND]  T15 ON T14.IndustryC = T15.IndCode
    	
    	WHERE
    	T0.Canceled = 'N'
            AND T0.Model NOT IN (23)
    	AND t0.docentry = 31355
            AND T0.[DocEntry] NOT IN
    
    	(
    		SELECT
    		S1.BaseEntry
    		FROM
    		[dbo].[ORPC] S0
    		JOIN [dbo].[RPC1] S1 ON S0.DocEntry = S1.DocEntry
    		JOIN [dbo].[PCH1] S2 ON S1.BaseEntry = S2.DocEntry AND S1.BaseLine = S2.LineNum
    	)
    
    	GROUP BY
    	CONVERT(NVARCHAR(200),T3.[AliasName]) ,
    	T11.[DocDate],
    	T0.[DocNum] ,
    	T0.[TaxDate],
             T0.[DocDate] ,
    	T0.[Serial]   ,
    	T0.[CardName] ,
    	T2.[TaxId0],
    	T15.[IndName],
    	T2.[State],
    		CASE
    		WHEN T0.[BaseAmnt] > 0 THEN T0.[BaseAmnt]
    		ELSE T0.[Max1099]
    	END,
    	T0.[DocTotal] 
    

    quarta-feira, 11 de novembro de 2020 17:49

Respostas

  • Boa tarde,

    Esse problema deve estar ocorrendo porque os Joins devem estar gerando várias combinações de linhas para a mesma nota fiscal. 

    Não sei como é o relacionamento entre as demais tabelas, mas experimente utilizar apenas um Join com a tabela PCH5:

    	LEFT JOIN [dbo].[PCH5]    T4 ON T4.AbsEntry = T0.DocEntry AND T4.[WtAmnt] <> 0

    E utilize um Case dentro do Sum para somar de acordo com o tipo:

    	SUM (case when T4.WTTypeId = 1 then T4.[WtAmnt] else 0 end)	AS 'PIS',
    	SUM (case when T4.WTTypeId = 2 then T4.[WtAmnt] else 0 end)	AS 'COFINS',
    	SUM (case when T4.WTTypeId = 3 then T4.[WtAmnt] else 0 end)	AS 'IRRF',
    	SUM (case when T4.WTTypeId = 4 then T4.[WtAmnt] else 0 end)	AS 'CSLL',
    	SUM (case when T4.WTTypeId = 5 then T4.[WtAmnt] else 0 end)	AS 'INSS',
    	SUM (case when T4.WTTypeId = 6 then T4.[WtAmnt] else 0 end)	AS 'ISS',
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Rafael M. Palma segunda-feira, 23 de novembro de 2020 02:02
    quarta-feira, 11 de novembro de 2020 18:34

Todas as Respostas

  • Boa tarde,

    Esse problema deve estar ocorrendo porque os Joins devem estar gerando várias combinações de linhas para a mesma nota fiscal. 

    Não sei como é o relacionamento entre as demais tabelas, mas experimente utilizar apenas um Join com a tabela PCH5:

    	LEFT JOIN [dbo].[PCH5]    T4 ON T4.AbsEntry = T0.DocEntry AND T4.[WtAmnt] <> 0

    E utilize um Case dentro do Sum para somar de acordo com o tipo:

    	SUM (case when T4.WTTypeId = 1 then T4.[WtAmnt] else 0 end)	AS 'PIS',
    	SUM (case when T4.WTTypeId = 2 then T4.[WtAmnt] else 0 end)	AS 'COFINS',
    	SUM (case when T4.WTTypeId = 3 then T4.[WtAmnt] else 0 end)	AS 'IRRF',
    	SUM (case when T4.WTTypeId = 4 then T4.[WtAmnt] else 0 end)	AS 'CSLL',
    	SUM (case when T4.WTTypeId = 5 then T4.[WtAmnt] else 0 end)	AS 'INSS',
    	SUM (case when T4.WTTypeId = 6 then T4.[WtAmnt] else 0 end)	AS 'ISS',
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Rafael M. Palma segunda-feira, 23 de novembro de 2020 02:02
    quarta-feira, 11 de novembro de 2020 18:34
  • Rafael,

    Concordo com o Gapimex, gostaria de sugerir que inicialmente você ao invês de utilizar o Left Join, fosse trocando para o Inner Join e executando de forma parcial para cada Left que você estaria trocando por Inner para tentar identificar em qual junção esta duplicidade ou retorno de dados não desejados estaria ocorrendo.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 11 de novembro de 2020 22:04
  • Era isso mesmo.

    Obrigado pela dica!!

    Abs

    segunda-feira, 23 de novembro de 2020 02:03
  • Era isso mesmo.

    Obrigado pela dica!!

    Abs

    Rafael,

    Ok, que bom.... espero ter ajudado.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 23 de novembro de 2020 22:22