ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro no subselect

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fdsilva.desenv
Novato
Novato


Registrado: Quarta-Feira, 28 de Novembro de 2012
Mensagens: 68

MensagemEnviada: Qui Jan 25, 2018 8:25 am    Assunto: Erro no subselect Responder com Citação

Galera, bom dia.

Então, estou com um problema no subselect que coloquei no meio do select, preciso dele para separar os valores totais onde o VALORTRIB > 0. Acontece que, ao colocar a subquery e referenciar com as tabelas principais aparece o seguinte erro:

"Msg 8120, Level 16, State 1, Line 9
Column 'CAIXAGERAL.VALORTRIB' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."

O que fazer neste caso? Podem me ajudar?

Código:

SELECT DISTINCT NF.CODNFCE CODNF, CLIE.CNPJ_CPF, CLIE.CODCLIE CODIGO, 'S' IND_OPER, 0 IND_EMIT, '' COD_PART
   , '65' COD_MOD, NF.SEQUENCIAL, NF.SITUACAO COD_SIT 
   , NF.CODCAIXA SERIE, NF.NUMNFCE NUMNF, '' REFCUPOMFISCAL, NF.CHAVEACESSO, NF.DATA DT_DOC, NF.DTENVIO DT_E_S, ROUND(SUM(ITMNF.TOTITEM)-SUM(ITMNF.DESCITEM)+SUM(ITMNF.ACRESCITEM),2) TOTAL_NF, 0 IND_PAGTO
   , SUM(ROUND((ITMNF.DESCITEM*100)/ITMNF.TOTITEM,2)) PERDESCTO
   , SUM(ROUND(ITMNF.TOTITEM*ITMNF.DESCITEM/100,2)) DESCONTO 
   , 0.00 VL_ABAT_NT, SUM(ITMNF.TOTITEM) TOTAL_MERC, '' TIPO_FRETE, 0 FRETE, 0 SEGURO, 0 VL_OUT_DA
   , (SELECT SUM(ROUND(CX.TOTITEM - CX.DESCITEM + CX.ACRESCITEM,2)) FROM CAIXAGERAL CX WHERE CX.VALORTRIB > 0
      AND NF.NUMNFCE = CX.COO AND NF.CODCAIXA = CX.CODCAIXA AND NF.SEQUENCIAL = CX.SEQUENCIAL AND NF.DATA = CX.DATA ) BASE_ICMS
   , (SELECT ROUND( (SUM(CX.TOTITEM - CX.DESCITEM + CX.ACRESCITEM)*CX.VALORTRIB)/100,2) FROM CAIXAGERAL CX WHERE CX.VALORTRIB = 0
      AND NF.NUMNFCE = CX.COO AND NF.CODCAIXA = CX.CODCAIXA AND NF.SEQUENCIAL = CX.SEQUENCIAL AND NF.DATA = CX.DATA ) VALOR_ICMS
   , (SELECT SUM(ROUND(CX.TOTITEM - CX.DESCITEM + CX.ACRESCITEM,2)) FROM CAIXAGERAL CX WHERE CX.VALORTRIB = 0
      AND NF.NUMNFCE = CX.COO AND NF.CODCAIXA = CX.CODCAIXA AND NF.SEQUENCIAL = CX.SEQUENCIAL AND NF.DATA = CX.DATA ) VALOR_ISENTO
   , 0 BASEICMSSUBST, 0 VALORICMSSUBST
   , 0 BASE_IPI, 0 VALOR_IPI, 'N' DEVOLUCAO, 'N' NFCOMPLEMENTAR, 'SP10' COP
   , 0 VALOR_ACRESCIMO
   , SUM(ROUND(ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM,2)) VALOR_MERC
   , 0 BASE_ICMS_ITM
   , 0 VL_ICMS
   , 0 VL_BC_ST
   , 0 VL_ICMS_ST
   , 0 BASE_IPI_ITM
   , 0 VL_IPI_ITM
   , 0.00 VL_PIS_ST, 0.00 VL_COFINS_ST
   , 0 CODOBS
   , 'S' EMISSAOPROPRIA
FROM NFCE NF
   INNER JOIN CAIXAGERAL ITMNF ON ITMNF.COO = NF.NUMNFCE AND ITMNF.CODCAIXA = NF.CODCAIXA AND ITMNF.SEQUENCIAL = NF.SEQUENCIAL AND NF.DATA = ITMNF.DATA 
   LEFT JOIN CXCNPJCPF CXCLIE ON CXCLIE.COO = NF.NUMNFCE AND CXCLIE.CODCAIXA = NF.CODCAIXA AND CXCLIE.SEQUENCIAL = NF.SEQUENCIAL AND NF.DATA = CXCLIE.DATA
   LEFT JOIN CLIENTES CLIE ON CLIE.CNPJ_CPF=CXCLIE.CNPJ_CPF
WHERE 
   NF.SITUACAO IN ('E','C')
   AND ITMNF.DATA BETWEEN '2017-10-01' AND '2017-10-02'
   AND ITMNF.TOTITEM > 0 
GROUP BY NF.CODNFCE, CLIE.CNPJ_CPF, CLIE.CODCLIE, NF.SEQUENCIAL, NF.SITUACAO
   , NF.CODCAIXA, NF.NUMNFCE, NF.CHAVEACESSO, NF.DATA, NF.DTENVIO
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 25, 2018 9:09 am    Assunto: Responder com Citação

Bom dia,

Pelo que entendi acho que é possível obter o resultado esperado sem a subquery. Experimente fazer uns testes substituindo a subquery pelo trecho abaixo:

Código:
   , SUM(CASE WHEN ITMNF.VALORTRIB > 0 THEN ROUND(ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM, 2) ELSE 0 END) BASE_ICMS


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fdsilva.desenv
Novato
Novato


Registrado: Quarta-Feira, 28 de Novembro de 2012
Mensagens: 68

MensagemEnviada: Qui Jan 25, 2018 9:35 am    Assunto: Responder com Citação

Fiz as alterações conforme me passou, não apresentou mais o erros, mas todos os valores vieram zerados dos três campos abaixo BASE_ICMS, VALOR_ICMS e ISENTOS. E eu sei que possuem valores nestes campos, pois é um calculo do TOTITEM.

Acredito que o resultado não deu certo ainda.

Código:

SELECT DISTINCT NF.CODNFCE CODNF, CLIE.CNPJ_CPF, CLIE.CODCLIE CODIGO, 'S' IND_OPER, 0 IND_EMIT, '' COD_PART
   , '65' COD_MOD, NF.SEQUENCIAL, NF.SITUACAO COD_SIT 
   , NF.CODCAIXA SERIE, NF.NUMNFCE NUMNF, '' REFCUPOMFISCAL, NF.CHAVEACESSO, NF.DATA DT_DOC, NF.DTENVIO DT_E_S, ROUND(SUM(ITMNF.TOTITEM)-SUM(ITMNF.DESCITEM)+SUM(ITMNF.ACRESCITEM),2) TOTAL_NF, 0 IND_PAGTO
   , SUM(ROUND((ITMNF.DESCITEM*100)/ITMNF.TOTITEM,2)) PERDESCTO
   , SUM(ROUND(ITMNF.TOTITEM*ITMNF.DESCITEM/100,2)) DESCONTO 
   , 0.00 VL_ABAT_NT, SUM(ITMNF.TOTITEM) TOTAL_MERC, '' TIPO_FRETE, 0 FRETE, 0 SEGURO, 0 VL_OUT_DA
   , SUM(CASE WHEN ITMNF.VALORTRIB > 0 THEN ROUND(ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM,2) ELSE 0 END) BASE_ICMS
   , SUM(CASE WHEN ITMNF.VALORTRIB > 0 THEN ROUND((ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM)*ITMNF.VALORTRIB/100,2) ELSE 0 END)VALOR_ICMS
   , SUM(CASE WHEN ITMNF.VALORTRIB = 0 THEN ROUND(ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM,2) ELSE 0 END) VALOR_ISENTO
   , 0 BASEICMSSUBST, 0 VALORICMSSUBST
   , 0 BASE_IPI, 0 VALOR_IPI, 'N' DEVOLUCAO, 'N' NFCOMPLEMENTAR, 'SP10' COP
   , 0 VALOR_ACRESCIMO
   , SUM(ROUND(ITMNF.TOTITEM - ITMNF.DESCITEM + ITMNF.ACRESCITEM,2)) VALOR_MERC
   , 0 BASE_ICMS_ITM
   , 0 VL_ICMS
   , 0 VL_BC_ST
   , 0 VL_ICMS_ST
   , 0 BASE_IPI_ITM
   , 0 VL_IPI_ITM
   , 0.00 VL_PIS_ST, 0.00 VL_COFINS_ST
   , 0 CODOBS
   , 'S' EMISSAOPROPRIA
FROM NFCE NF
   INNER JOIN CAIXAGERAL ITMNF ON ITMNF.COO = NF.NUMNFCE AND ITMNF.CODCAIXA = NF.CODCAIXA AND ITMNF.SEQUENCIAL = NF.SEQUENCIAL AND NF.DATA = ITMNF.DATA 
   LEFT JOIN CXCNPJCPF CXCLIE ON CXCLIE.COO = NF.NUMNFCE AND CXCLIE.CODCAIXA = NF.CODCAIXA AND CXCLIE.SEQUENCIAL = NF.SEQUENCIAL AND NF.DATA = CXCLIE.DATA
   LEFT JOIN CLIENTES CLIE ON CLIE.CNPJ_CPF=CXCLIE.CNPJ_CPF
WHERE 
   NF.SITUACAO IN ('E','C')
   AND ITMNF.DATA BETWEEN '2017-12-01' AND '2017-12-31'
   AND ITMNF.TOTITEM > 0 
GROUP BY NF.CODNFCE, CLIE.CNPJ_CPF, CLIE.CODCLIE, NF.SEQUENCIAL, NF.SITUACAO
   , NF.CODCAIXA, NF.NUMNFCE, NF.CHAVEACESSO, NF.DATA, NF.DTENVIO
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fdsilva.desenv
Novato
Novato


Registrado: Quarta-Feira, 28 de Novembro de 2012
Mensagens: 68

MensagemEnviada: Qui Jan 25, 2018 10:01 am    Assunto: Responder com Citação

Pelo o que entendi, traz zerado quando tento calcular.

Se eu trouxer apenas um campo como por exemplo o TOTITEM ou DESCITEM, ele traz os valores. Agora se eu fizer um cálculo ele deixa zerado.

Saberia me dizer porque o que seria?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 25, 2018 10:19 am    Assunto: Responder com Citação

Existe a possibilidade de algum campo envolvido no calculo estar nulo?
Se existir será necessário utilizar a função Coalesce ou outra semelhante para trocar o null do campo por 0 antes de utiliza-lo no calculo.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fdsilva.desenv
Novato
Novato


Registrado: Quarta-Feira, 28 de Novembro de 2012
Mensagens: 68

MensagemEnviada: Qui Jan 25, 2018 10:57 am    Assunto: Responder com Citação

Era exatamente isso. coloquei ISNULL(campo,0) e funcionou.

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB