Pular para o conteúdo
  • Este tópico contém 8 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 1 mês atrás por Eliza.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #151964
    Eliza
    Participante

      olá pessoal,

      Tive que incluir um campo novo no SELECT, depois disso acusa erro de ORA-00904

      linha incluída:

      , NVL((SELECT  C1.PERCCOM PERCCOMI FROM AD_COMECOMMERCE C1 WHERE C1.DTAVIGENCIA = (SELECT max(C1.DTAVIGENCIA) AS DTAVIGENCIA FROM AD_COMECOMMERCE C1  WHERE C1.DTAVIGENCIA <= CAB.DTNEG AND C1.CODEMP = CAB.CODEMP) AND C1.CODEMP = CAB.CODEMP) ,0) AS PERCPLAT

       

      =>select SEM  erro

      SELECT ….
      , NVL(VEN.COMVENDA, 0) AS PERCCOMDEV
      , VEN.AD_BASECALCCOM AS BCCOM
      , EMP.AD_COMPLAT AS PERCPLAT          =====>        OK
      , EMP.AD_COMECOMARG COMECOMARG
      , TPO.AD_OPERADOR
      , TPO.AD_LUCRATIVIDADE
      , NULL AS LOCAL
      , CAB.AD_ANOMES
      , CAB.AD_ANO
      , 0 AS VLRARMAZ
      , 0 AS TOTVLRARMAZ
      , 0 AS NUNOTACPA
      , 0 AS CODEMPCPA
      , 0 AS VLRCPA
      , NULL AS DTENTSAICPA
      , NULL AS COMPRADOR
      FROM TGFCAB CAB INNER JOIN TGFPAR PAR ON PAR.CODPARC = CAB.CODPARC
      INNER JOIN TSICID CID ON CID.CODCID = PAR.CODCID
      INNER JOIN TSIUFS UFS ON UFS.CODUF = CID.UF
      INNER JOIN TGFTOP TPO ON TPO.CODTIPOPER = CAB.CODTIPOPER AND TPO.DHALTER = CAB.DHTIPOPER
      INNER JOIN TGFITE ITE ON ITE.NUNOTA = CAB.NUNOTA
      INNER JOIN TGFEMP EMP ON EMP.CODEMP = CAB.CODEMP
      INNER JOIN TGFPRO PRO ON PRO.CODPROD = ITE.CODPROD
      LEFT  JOIN TGFMAR MAR ON MAR.CODIGO = PRO.CODMARCA
      LEFT  JOIN TGFPAR FRN ON FRN.CODPARC = PRO.CODPARCFORN
      INNER JOIN TGFGRU GRU ON GRU.CODGRUPOPROD = PRO.CODGRUPOPROD
      LEFT  JOIN TGFVEN VEN ON VEN.CODVEND = CAB.CODVEND
      LEFT  JOIN TCP_IMPOSTOS IMP ON IMP.NUNOTA = ITE.NUNOTA AND IMP.SEQUENCIA = ITE.SEQUENCIA
      LEFT  JOIN AD_LINPROD LIN ON GRU.AD_CODLINPROD = LIN.CODLIN
      WHERE TPO.GOLDEV = -1

      GROUP BY CAB.CODEMP,  EMP.AD_COMPLAT,  EMP.AD_COMECOMARG, NVL(CAB.DTENTSAI,CAB.DTNEG), CAB.ORDEMCARGA, PRO.CODGRUPOPROD, GRU.DESCRGRUPOPROD, LIN.CODLIN, LIN.DESCLIN
      ,PRO.CODMARCA, NVL(MAR.DESCRICAO,PRO.MARCA), PAR.CODCID, CID.NOMECID, CAB.CODPARC, PAR.RAZAOSOCIAL, UFS.CODUF, UFS.UF, PRO.CODPARCFORN, FRN.RAZAOSOCIAL, CAB.CODVEND
      ,VEN.APELIDO, ITE.CODPROD, PRO.DESCRPROD, VEN.COMVENDA, VEN.AD_BASECALCCOM,CAB.NUNOTA, CAB.NUMNOTA, TPO.GRUPO, CAB.CODTIPOPER, TPO.DESCROPER
      ,TPO.AD_OPERADOR
      ,TPO.AD_LUCRATIVIDADE, LOCAL, CAB.AD_ANOMES, CAB.AD_ANO

       

      =>select COM erro

      SELECT ….
      , NVL(VEN.COMVENDA, 0) AS PERCCOMDEV
      , VEN.AD_BASECALCCOM AS BCCOM
      –, EMP.AD_COMPLAT AS PERCPLAT
      , NVL((SELECT  C1.PERCCOM PERCCOMI FROM AD_COMECOMMERCE C1 WHERE C1.DTAVIGENCIA = (SELECT max(C1.DTAVIGENCIA) AS DTAVIGENCIA FROM AD_COMECOMMERCE C1  WHERE C1.DTAVIGENCIA <= CAB.DTNEG AND C1.CODEMP = CAB.CODEMP) AND C1.CODEMP = CAB.CODEMP) ,0) AS PERCPLAT      ==>  dá  ERRO
      , EMP.AD_COMECOMARG COMECOMARG
      , TPO.AD_OPERADOR
      , TPO.AD_LUCRATIVIDADE
      , NULL AS LOCAL
      , CAB.AD_ANOMES
      , CAB.AD_ANO
      , 0 AS VLRARMAZ
      , 0 AS TOTVLRARMAZ
      , 0 AS NUNOTACPA
      , 0 AS CODEMPCPA
      , 0 AS VLRCPA
      , NULL AS DTENTSAICPA
      , NULL AS COMPRADOR
      FROM TGFCAB CAB INNER JOIN TGFPAR PAR ON PAR.CODPARC = CAB.CODPARC
      INNER JOIN TSICID CID ON CID.CODCID = PAR.CODCID
      INNER JOIN TSIUFS UFS ON UFS.CODUF = CID.UF
      INNER JOIN TGFTOP TPO ON TPO.CODTIPOPER = CAB.CODTIPOPER AND TPO.DHALTER = CAB.DHTIPOPER
      INNER JOIN TGFITE ITE ON ITE.NUNOTA = CAB.NUNOTA
      INNER JOIN TGFEMP EMP ON EMP.CODEMP = CAB.CODEMP
      INNER JOIN TGFPRO PRO ON PRO.CODPROD = ITE.CODPROD
      LEFT  JOIN TGFMAR MAR ON MAR.CODIGO = PRO.CODMARCA
      LEFT  JOIN TGFPAR FRN ON FRN.CODPARC = PRO.CODPARCFORN
      INNER JOIN TGFGRU GRU ON GRU.CODGRUPOPROD = PRO.CODGRUPOPROD
      LEFT  JOIN TGFVEN VEN ON VEN.CODVEND = CAB.CODVEND
      LEFT  JOIN TCP_IMPOSTOS IMP ON IMP.NUNOTA = ITE.NUNOTA AND IMP.SEQUENCIA = ITE.SEQUENCIA
      LEFT  JOIN AD_LINPROD LIN ON GRU.AD_CODLINPROD = LIN.CODLIN
      WHERE TPO.GOLDEV = -1
      GROUP BY CAB.CODEMP,  EMP.AD_COMPLAT,  EMP.AD_COMECOMARG, NVL(CAB.DTENTSAI,CAB.DTNEG), CAB.ORDEMCARGA, PRO.CODGRUPOPROD, GRU.DESCRGRUPOPROD, LIN.CODLIN, LIN.DESCLIN
      ,PRO.CODMARCA, NVL(MAR.DESCRICAO,PRO.MARCA), PAR.CODCID, CID.NOMECID, CAB.CODPARC, PAR.RAZAOSOCIAL, UFS.CODUF, UFS.UF, PRO.CODPARCFORN, FRN.RAZAOSOCIAL, CAB.CODVEND
      ,VEN.APELIDO, ITE.CODPROD, PRO.DESCRPROD, VEN.COMVENDA, VEN.AD_BASECALCCOM,CAB.NUNOTA, CAB.NUMNOTA, TPO.GRUPO, CAB.CODTIPOPER, TPO.DESCROPER
      ,TPO.AD_OPERADOR
      ,TPO.AD_LUCRATIVIDADE, LOCAL, CAB.AD_ANOMES, CAB.AD_ANO

      Qual é  o problema ?

      #152056
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Bom, de cara tua query (alinhando E colocando em case style diferente, pra poder visualizar melhor) ficou :

        
        
        , NVL(
        (SELECT C1.PERCCOM PERCCOMI FROM AD_COMECOMMERCE C1
        WHERE C1.DTAVIGENCIA = (Select max(C1.DTAVIGENCIA) AS DTAVIGENCIA
        
        from   AD_COMECOMMERCE C1
        Where C1.DTAVIGENCIA <= CAB.DTNEG
        And C1.CODEMP = CAB.CODEMP
        )
        AND C1.CODEMP = CAB.CODEMP
        
        ,0) AS PERCPLAT
        
        

         

        Dá pra ver que vc usa o MESMO EXATO ALIAS de C1 para DOIS SELECTs Diferentes, que (obviamente) trazem colunas Diferentes!!! Não admira ele te dar erro… Corrija isso, plz…

        []s

         

        Chiappa

         

        #152069
        Eliza
        Participante

          oi Chiappa,

          Verdade.. tinha esquecido de corrigir. Aliás, corrigi mas  copiei a versão anterior.

          Resumi a pesquisa:

          select cab.codemp, cab.nunota
          , CAB.CODTIPOPER
          , ITE.CODPROD
          , SUM(NVL(ITE.QTDNEG,0)) AS QTDNEGDEV
          , NVL((SELECT C1.PERCCOM AS PERCCOMI FROM AD_COMECOMMERCE C1 WHERE C1.DTAVIGENCIA =
          (SELECT max(C2.DTAVIGENCIA) FROM AD_COMECOMMERCE C2 WHERE C2.DTAVIGENCIA <= CAB.DTNEG AND C2.CODEMP = CAB.CODEMP) AND C1.CODEMP = CAB.CODEMP),0) AS PERCPLAT
          FROM TGFCAB CAB
          INNER JOIN TGFITE ITE ON ITE.NUNOTA = CAB.NUNOTA
          INNER JOIN TGFTOP TPO ON TPO.CODTIPOPER = CAB.CODTIPOPER
          where cab.dtneg = ’01/09/2021′
          group by cab.codemp, cab.nunota, CAB.CODTIPOPER, ITE.CODPROD

          Deve ser um erro simples mas acredita que eu não consegui descobrir porque o erro de Group by ?

           

          #152070
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Corrigida a issue apontada, não vejo mais nada questionável, A NÃO SER a linha :

            where cab.dtneg = ’01/09/2021′

            cfrme acredito que vc saiba, se DTNEG é do datatype DATE vc ** TEM ** que fazer conversão  Explícita da sua string pra evitar erros de formato, a linha deveria ser :

            where cab.dtneg = to_date(’01/09/2021′, ‘dd/mm/yyyy’)

             

            Mas isso não tem NADA A VER com o erro atual… Olhando por cima, a sintaxe agora está correta, então com CERTEZA é alguma issue com os seus dados : talvez numa das tabelas o nome de uma das colunas mencionadas é outro, OU talvez a tua query colunar que popula essa coluna PERCPLAT esteja retornando mais de uma linha, OU talvez vc já tenha numa das tabelas uma outra coluna chamada PERCPLAT  …. Enfim, me parece ser questão local aí do seu database e dos seus dados, não parece ser nada de sintaxe, genérico, absolutamente não…

             

            #152086
            Eliza
            Participante

              opa…  obrigada pelo retorno.

              Vou dar uma olhada na base de dadeo.

               

              #152087
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Sugestão adicional : executa a mesma query pelo sqlplus, que muitas vezes ele põe um ‘*’ exatamente abaixo da linha/coluna com erro, se ele conseguir identificar, tenta lá…

                #152099
                Eliza
                Participante

                  Consegui contornar colocando o AVG.  Testei em um período grande e parece que deu certo.

                  select cab.codemp, cab.nunota
                  , CAB.CODTIPOPER
                  , ITE.CODPROD
                  , SUM(NVL(ITE.QTDNEG,0)) AS QTDNEGDEV
                  , AVG( NVL((SELECT C1.PERCCOM AS PERCCOMI FROM AD_COMECOMMERCE C1 WHERE C1.DTAVIGENCIA =
                  (SELECT max(C2.DTAVIGENCIA) FROM AD_COMECOMMERCE C2 WHERE C2.DTAVIGENCIA <= CAB.DTNEG AND C2.CODEMP = CAB.CODEMP) AND C1.CODEMP = CAB.CODEMP),0)) AS PERCPLAT
                  FROM TGFCAB CAB
                  INNER JOIN TGFITE ITE ON ITE.NUNOTA = CAB.NUNOTA
                  INNER JOIN TGFTOP TPO ON TPO.CODTIPOPER = CAB.CODTIPOPER
                  where cab.dtneg = ’01/09/2021′
                  group by cab.codemp, cab.nunota, CAB.CODTIPOPER, ITE.CODPROD

                   

                   

                  #152121
                  Avatar photoJosé Laurindo Chiappa
                  Moderador

                    A função AVG é uma função de grupo, ie, uma função que transforma múltiplos valores num só, no caso calculando a média aritmética (AVeraGe) : pelo jeito, foi exatamente o que eu disse, ie, a query colunar estava trazendo mais de um registro, aí com o AVG vc transformou os n registros num só, extraindo a média….

                    Abraços,

                     

                    José Laurindo Chiappa

                    #152122
                    Eliza
                    Participante

                      Obrigada pela dica.    🙂

                       

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress