Contagem de Parcelas - Problemas com Group By

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
silvadouglas
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 13 Jun 2018 2:25 pm

Prezados boa tarde.

Estou criando uma query de exportação de dados em excel para um sistema financeiro que será implantado no meu local de trabalho e estou com dificuldades em montar o select para quantas parcelas existem para aquele determinado item ou seja; se o documento 99999 retorna 3 vezes no meu resultado do select significa que são 3 parcelas referente a um mesmo item mas ao efetuar o count do campo especifico (ICR.NR_PARCELA) o oracle me retorna o erro:

ORA-00937: não é uma função de grupo de grupo simples
00937. 00000 - "not a single-group group function"
*Cause:
*Action:
Erro na linha: 2 Coluna: 77


Este é o meu select:

Selecionar tudo

SELECT DISTINCT
'IMPORTADO' AS MODELO, 'A VENCER'  AS SIT_ABERTO_PREVISTO_A_VENCER, TO_CHAR(ICR.DT_VENCIMENTO, 'DD/MM/RRRR') AS DATA_DE_VENCIMENTO,'' AS UNIDADE_DE_NEGOCIO,
CASE WHEN   (TD.DS_TIP_DOC = 'RPS SERVICO'              AND TP_CON_REC = 'C')       THEN 'CR009'
     WHEN   (TD.DS_TIP_DOC = 'RPS SERVICO'              AND TP_CON_REC = 'D')       THEN 'CR010'
     WHEN   (TD.DS_TIP_DOC = 'RECIBO'                   AND TP_CON_REC = 'D')       THEN 'CR019'
     WHEN   (TD.DS_TIP_DOC = 'NOTA FISCAL ELETRONICA'   AND TP_CON_REC = 'C')       THEN 'CR009'
     WHEN   (TD.DS_TIP_DOC = 'BOLETO BANCARIO'          AND TP_CON_REC = 'D')       THEN 'CR018' ELSE 'CR018' END PO,
TO_CHAR(CR.DT_LANCAMENTO, 'DD/MM/RRRR')             AS     DATA_DOCUMENTO, TO_CHAR(CR.DT_EMISSAO,  'DD/MM/RRRR') AS DATA_CONTABILIZACAO,
CASE WHEN    TD.DS_TIP_DOC          =    'RPS SERVICO'               THEN    'RPS'
     WHEN    TD.DS_TIP_DOC          =    'RECIBO'                    THEN    'RC'
     WHEN    TD.DS_TIP_DOC          =    'NOTA FISCAL ELETRONICA'    THEN    'NFE'
     WHEN    TD.DS_TIP_DOC          =    'ADIANTAMENTO A CLIENTE'    THEN    'ADC' ELSE 'BB' END AS ESPECIE_DE_DOCUMENTO,
CR.NR_DOCUMENTO ||'-'|| ICR.NR_PARCELA ||'/'|| ICR.NR_PARCELA AS NUMERO_DOCUMENTO,
TO_CHAR (ICR.VL_DUPLICATA-CASE WHEN VL_SOMA_RECEBIDO IS NULL THEN 0 ELSE ICR.VL_SOMA_RECEBIDO END, 'FM999G999G990D90') DIF_VLR,
IGESP.ICD.CODIGO AS EMPRESA, CR.CD_CON_REC AS NUMERO_TITULO_BANCARIO, '' AS PORTADOR, '' AS CONTA, '' AS DATA_PROGRAMAVEL_PAGAMENTO, '' AS PORCENTO_PROVAVEL, 'R' AS MOEDA, 'BAN' AS TIPO_BANCARIA_CARTEIRA, 'S' AS ACEITE, 'N' AS PROTESTO,
'' AS PRAZO_PROTESTO_EM_DIAS, 'N' AS MORA_DIARIA, '' AS PORCENTO_MORA_DIARIA, '' AS VALOR_MORA_DIARIA, '' AS PRAZO_MORA, 'N' AS MULTA, '' AS PORCENTO_MULTA, '' AS VALOR_MULTA, '' AS PRAZO_MULTA, 'N' AS DESCONTO, '' AS PORCENTO_DESCONTO,
'' AS VALOR_DESCONTO, '' AS DESCONTO_ATE, 'N' AS CORRECAO_MONETARIA, '' AS INDEXADOR, '' AS INDICE_DATA_BASE, '' AS INDICE_ATUAL, '' AS BANCO_PARA_PAGAMENTO, '' AS AGENCIA_PARA_PAGAMENTO, '' AS NOME_AGENCIA_PARA_PAGAMENTO,
'' AS PRACA_DE_PAGAMENTO, '' AS CONTA_PARA_PAGAMENTO, '' AS CNPJ_CPF_PARA_PAGAMENTO, '' AS INSTRUCAO_I, '' AS INSTRUCAO_II, '' AS INSTRUCAO_III, CR.DS_CON_REC ||' | '|| CR.DS_OBSERVACAO AS OBSERVACOES, '' AS MENSAGEM_BOLETO, '' AS CODIGO_DE_BARRAS,
'' AS LINHA_DIG_FICHA_COMPENS_CONCES, CR.CD_ATENDIMENTO AS CAMPO_CHAVE, '' AS ADICIONAL_CARACTER_I, '' AS ADICIONAL_CARACTER_II, '' AS ADICIONAL_DATA_I, '' AS ADICIONAL_DATA_II, TO_CHAR(ICR.VL_DUPLICATA, 'FM999G999G990D90') ADICIONAL_DECIMAL_I,
TO_CHAR(ICR.VL_SOMA_RECEBIDO,   'FM999G999G990D90') ADICIONAL_DECIMAL_II, '' AS ADICIONAL_LOGICO_I, '' AS ADICIONAL_LOGICO_II, '' AS CÓDIGO_HISTORICO, CR.DS_CON_REC AS HISTÓRICO_COMPLEMENTAR, --RCR.CD_SETOR AS COD_CENTROS_DE_CUSTO,
'100' AS PORCENTO_RATEIO, '' AS BOLETO_TRANSMITIDO, '' AS BOLETO_EMITIDO, '0,00' AS VALOR_PAGO,TO_CHAR(ICR.DT_VENCIMENTO, 'DD/MM/RRRR') AS DATA_REFERENCIA         
FROM CON_REC CR
  INNER JOIN ITCON_REC                      ICR     ON      CR.CD_CON_REC           =   ICR.CD_CON_REC  AND ICR.DT_VENCIMENTO   >   =   '01/01/2017'    AND ICR.TP_QUITACAO NOT IN  ('Q','V')
  LEFT JOIN PROCESSO                        P       ON      CR.CD_PROCESSO          =   P.CD_PROCESSO
  LEFT JOIN TIP_DOC                         TD      ON      CR.CD_TIP_DOC           =   TD.CD_TIP_DOC
  LEFT JOIN PLANO_CONTAS                    PC      ON      CR.CD_REDUZIDO          =   PC.CD_REDUZIDO
  LEFT JOIN FORNECEDOR                      F       ON      CR.CD_FORNECEDOR        =   F.CD_FORNECEDOR
  LEFT JOIN ATENDIME                        A       ON      CR.CD_ATENDIMENTO       =   A.CD_ATENDIMENTO
  LEFT JOIN PACIENTE                        P       ON      A.CD_PACIENTE           =   P.CD_PACIENTE
  LEFT JOIN DESCONTOS_ACRESCIMOS            DA1     ON      CR.CD_DESCONTO          =   DA1.CD_DESC_ACRES
  LEFT JOIN DESCONTOS_ACRESCIMOS            DA2     ON      CR.CD_ACRESCIMO         =   DA2.CD_DESC_ACRES
  LEFT JOIN HISTORICO_padrão                HP      ON      CR.CD_HISTORICO_padrão  =   HP.CD_HISTORICO_padrão
  LEFT JOIN NOTA_FISCAL                     NF      ON      CR.CD_NOTA_FISCAL       =   NF.CD_NOTA_FISCAL
  LEFT JOIN TIPO_LOGRADOURO                 TL      ON      NF.CD_TIPO_LOGRADOURO   =   TL.CD_TIPO_LOGRADOURO
  LEFT JOIN IGESP.IMPORTA_CLIENTES_DZYON    ICD     ON  (   ICD.CPF_CGC     =   REGEXP_REPLACE(LPAD(P.NR_CPF,11,'0'),'([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})','\1.\2.\3-\4'))
                                                    OR  (   ICD.CPF_CGC     =   REGEXP_REPLACE(LPAD(F.NR_CGC_CPF,14,'0'),'([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{2})','\1.\2.\3/\4-\5'))
                                                    OR  (   F.NR_CGC_CPF    =   P.NR_CPF        )
                                                    OR  (   P.NR_IDENTIDADE =   ICD.RG_IE       )
  INNER JOIN RAT_CONREC                     RCR     ON      CR.CD_CON_REC   =   RCR.CD_CON_REC
  WHERE CR.NR_DOCUMENTO = '10418';
Aqui é onde estou tentando alterar:

Selecionar tudo

CR.NR_DOCUMENTO ||'-'|| ICR.NR_PARCELA ||'/'|| ICR.NR_PARCELA AS NUMERO_DOCUMENTO,
Após a barra neste trecho é necessário que seja exibida a numeração de parcelas que são retornadas no mesmo select ou seja, utilizando o documento 10418 do select atualmente obtenho o seguinte retorno:

Selecionar tudo

DATA_DOCUMENTO | DATA_CONTABILIZACAO | ESPECIE_DE_DOCUMENTO | NUMERO_DOCUMENTO | DIF_VLR    | EMPRESA
19/06/2018	     |  19/06/2018	           |  RPS	                             | 10418-1/1	                 | 21.063,40 |
04/09/2017	     |  31/08/2017	           |  RPS	                             | 10418-1/1	                 | 1.141,77   | 100045
Ma na coluna NUMERO_DOCUMENTO podemos observar que após a " / " na numeração das parcelas sempre retorna 1. O correto para o exemplo seria:

Selecionar tudo

DATA_DOCUMENTO | DATA_CONTABILIZACAO | ESPECIE_DE_DOCUMENTO | NUMERO_DOCUMENTO | DIF_VLR    | EMPRESA
19/06/2018	     |  19/06/2018	           |  RPS	                             | 10418-1/1	                 | 21.063,40 |
04/09/2017	     |  31/08/2017	           |  RPS	                             | 10418-1/2	                 | 1.141,77   | 100045
[/size]

já inseri um group by ao final do meu select mas não resolve..

Poderiam me ajudar? já estou quebrando a cabeça com esse select já faz alguns dias e só falta isso para concluir.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá,

1- O que determina se tem mais de uma parcela e a quantidade de linhas referentes ao "NUMERO_DOCUMENTO"?
2- ICR.NR_PARCELA não deveria já trazer qual seria a parcela, ou o total de parcelas?
3- Esse DISTINCT é realmente necessário ou é devido a relacionamentos incorretos?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes