Imprimi Página | Fechar janela

SQL Triplicando Resultado

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=42586
Data da Impressão: quinta-feira, 18 de abril de 2024 at 00:25


Topico: SQL Triplicando Resultado

Postado por: GUSTAVOJ
Assunto: SQL Triplicando Resultado
Data Postagem: quarta-feira, 13 de março de 2019 at 17:22

Quando eu executo este fonte no SQL, trás e mesmo resultado três vezes.

Alguém, poderia me ajudar??

SELECT CN9_NUMERO AS ‘CONTRATO‘,
        CONVERT(DATE, SUBSTRING(CN9_DTINIC, 1, 4) + ‘-‘ + SUBSTRING(CN9_DTINIC, 5, 2) + ‘-‘ + SUBSTRING(CN9_DTINIC, 7, 2)) AS ‘DT INICIO‘,
        CONVERT(DATE, SUBSTRING(CN9_DTFIM, 1, 4) + ‘-‘ + SUBSTRING(CN9_DTFIM, 5, 2) + ‘-‘ + SUBSTRING(CN9_DTFIM, 7, 2)) AS ‘DT FIM‘,
        CN9_NUMERO AS ‘CENTRO DE CUSTO‘,
        CN9_ZZEMTI AS ‘ART EMITIDA‘,
        CONVERT(DATE,CN9_ZZDTVA) AS ‘VALIDADE DA ART‘,
        CN9_VLATU   AS ‘VALOR CONTRATO‘,
        CNC_CLIENT AS ‘CLIENTE‘,
       CNC_LOJACL AS ‘LOJA CLIENTE‘,
        A1_NOME    AS ‘NOME CLIENTE‘,
        CNE_PEDIDO AS ‘PEDIDO‘,
       CNE_PERC   AS ‘PERCENTUAL‘,
        C6_NOTA AS ‘NOTA FISCAL‘,
        E1_NUM AS ‘NUMERO‘,
        CNE_REVISA,
        CONVERT(DATE,E1_BAIXA) AS ‘DT BAIXA‘,
        CNF_VLPREV AS ‘VALOR PREVISTO‘,
       CNF_PARCEL AS ‘PARCELA‘,
        CONVERT(DATE,CNF_DTVENC) AS ‘VENCIMENTO‘
FROM CN9010 CN9
INNER JOIN CNC010 CNC ON CNC.CNC_NUMERO = CN9.CN9_NUMERO AND CNC.D_E_L_E_T_ =‘‘
INNER JOIN SA1010 A1 ON CNC.CNC_CLIENT = A1.A1_COD AND CNC.CNC_LOJACL = A1.A1_LOJA AND A1.D_E_L_E_T_ =‘‘
INNER JOIN CNF010 CNF ON CNF.CNF_CONTRA = CN9.CN9_NUMERO AND CN9.D_E_L_E_T_=‘‘
INNER JOIN CNE010 CNE ON CNE.CNE_CONTRA = CNF.CNF_CONTRA AND CNE.D_E_L_E_T_=‘‘
INNER JOIN SC6010 C6 ON C6.C6_NUM = CNE.CNE_PEDIDO AND C6.D_E_L_E_T_ =‘‘
INNER JOIN SE1010 E1 ON E1.E1_NUM = C6.C6_NOTA AND E1.D_E_L_E_T_ =‘‘ AND E1.E1_TIPO =‘NF‘
WHERE CN9.D_E_L_E_T_=‘‘
AND CN9_NUMERO = ‘201000272‘
AND CN9_REVISA = ‘002‘
AND CN9.D_E_L_E_T_=‘‘
AND CNF_CONTRA = ‘201000272‘
AND CNF_REVISA = ‘002‘
AND CNF.D_E_L_E_T_=‘‘
AND CNE_CONTRA = ‘201000272‘    
AND CNE_REVISA = ‘002‘
AND CNE.D_E_L_E_T_=‘‘
AND E1_PREFIXO = ‘SRV‘
AND CNC_NUMERO = ‘201000272‘
AND CNC_REVISA = ‘002‘

GROUP BY CN9_NUMERO,CN9_REVISA,CN9_DTINIC,CN9_DTFIM,CN9_NUMERO,CN9_ZZEMTI,CN9_ZZDTVA,CN9_VLATU,CNC_CLIENT,CNC_LOJACL, A1_NOME, CNE_PEDIDO, CNE_PERC, C6_NOTA, E1_NUM, CNE_REVISA, E1_BAIXA, CNF_VLPREV, CNF_PARCEL, CNF_DTVENC


Respostas:

Postado Por: ERPC
Data Postagem: quinta-feira, 14 de março de 2019 at 00:38

Use o próprio Query Analizer do Banco de Dados, pegue o resultado da Query, e monte queries menores para testar os seus "JOINS" . Algum JOIN est[a retornando mais de um registro para a condicão usada.

Por exemplo, para o Join com a CNC010 baseado no campo CN9_NUMERO, pegue o valor retornado na coluna ‘centro de custo‘ e monte uma query baseada no join, trocando o valor (‘xxx‘) pelo valor retornado.

select * from CNC010 CNC WHERE CNC.CNC_NUMERO = ‘xxx‘ AND CNC.D_E_L_E_T_ =‘ ‘

Faça isso para os outros joins, um deles vai retornar mais de uma linha.

Abraços




Postado Por: STROZI
Data Postagem: quinta-feira, 14 de março de 2019 at 08:00

Bom dia,

Este título possui quantas parcelas?

Provavelmente seu problema está ai. Para resolver, ou você dá um jeito de trazer as parcelas todas na mesma linha em campos diferentes, ou retira a coluna parcela e soma o valor.

Strozi®



Postado Por: EMERSON.EN
Data Postagem: quinta-feira, 14 de março de 2019 at 08:59

outra coisa: como regra, passe a utilizar a filial nos filtros, isso vai melhorar bastante a performance da pesquisa.

SELECT
     CN9.CN9_NUMERO AS ‘CONTRATO‘,
     CONVERT(DATE, SUBSTRING(CN9.CN9_DTINIC, 1, 4) + ‘-‘ + SUBSTRING(CN9.CN9_DTINIC, 5, 2) + ‘-‘ + SUBSTRING(CN9.CN9_DTINIC, 7, 2)) AS ‘DT INICIO‘,
     CONVERT(DATE, SUBSTRING(CN9.CN9_DTFIM, 1, 4) + ‘-‘ + SUBSTRING(CN9.CN9_DTFIM, 5, 2) + ‘-‘ + SUBSTRING(CN9.CN9_DTFIM, 7, 2)) AS ‘DT FIM‘,
     CN9.CN9_NUMERO AS ‘CENTRO DE CUSTO‘,
--     CN9_ZZEMTI AS ‘ART EMITIDA‘,
--     CONVERT(DATE,CN9_ZZDTVA) AS ‘VALIDADE DA ART‘,
     CN9.CN9_VLATU   AS ‘VALOR CONTRATO‘,
     CNC.CNC_CLIENT AS ‘CLIENTE‘,
     CNC.CNC_LOJACL AS ‘LOJA CLIENTE‘,
     A1.A1_NOME    AS ‘NOME CLIENTE‘,
     CNE.CNE_PEDIDO AS ‘PEDIDO‘,
     CNE.CNE_PERC   AS ‘PERCENTUAL‘,
     C6.C6_NOTA AS ‘NOTA FISCAL‘,
     E1.E1_NUM AS ‘NUMERO‘,
     CNE.CNE_REVISA,
     CONVERT(DATE,E1.E1_BAIXA) AS ‘DT BAIXA‘,
     CNF.CNF_VLPREV AS ‘VALOR PREVISTO‘,
     CNF.CNF_PARCEL AS ‘PARCELA‘,
     CONVERT(DATE,CNF.CNF_DTVENC) AS ‘VENCIMENTO‘
FROM
     CN9010 CN9
INNER JOIN
     CNC010 CNC ON
     CNC.D_E_L_E_T_ = ‘‘
     AND CNC.CNC_NUMERO = CN9.CN9_NUMERO
     AND CNC.CNC_REVISA = CN9.CN9_REVISA
INNER JOIN
     SA1010 A1 ON
     A1.D_E_L_E_T_ = ‘‘
     AND A1.A1_COD = CNC.CNC_CLIENT
     AND A1.A1_LOJA = CNC.CNC_LOJACL
INNER JOIN
     CNF010 CNF ON
     CNF.D_E_L_E_T_= ‘‘
     AND CNF.CNF_CONTRA = CN9.CN9_NUMERO
     AND CNF.CNF_REVISA = CN9.CN9_REVISA
INNER JOIN
     CNE010 CNE ON
     CNE.D_E_L_E_T_= ‘‘
     AND CNE.CNE_CONTRA = CN9.CN9_NUMERO
     AND CNE.CNE_REVISA = CN9.CN9_REVISA
INNER JOIN
     SC6010 C6 ON
     C6.D_E_L_E_T_ = ‘‘
     AND C6.C6_NUM = CNE.CNE_PEDIDO
INNER JOIN SE1010 E1 ON
     E1.D_E_L_E_T_ = ‘‘
     AND E1.E1_NUM = C6.C6_NOTA
     AND E1.E1_TIPO = ‘NF‘
     AND E1_PREFIXO = ‘SRV‘
WHERE
     CN9.D_E_L_E_T_=‘‘
     AND CN9.CN9_NUMERO = ‘201000272‘
     AND CN9.CN9_REVISA = ‘002‘
GROUP BY
     CN9.CN9_NUMERO,CN9.CN9_REVISA,CN9.CN9_DTINIC,CN9.CN9_DTFIM,
     /*CN9.CN9_ZZEMTI,CN9.CN9_ZZDTVA,*/CN9.CN9_VLATU,CNC.CNC_CLIENT,CNC.CNC_LOJACL,
     A1.A1_NOME,CNE.CNE_PEDIDO,CNE.CNE_PERC,C6.C6_NOTA,
     E1.E1_NUM,E1.E1_BAIXA,CNF.CNF_VLPREV,CNF.CNF_PARCEL,CNF.CNF_DTVENC





Imprimir Página | Fechar Janela