distinct

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
elciodba
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Sex, 31 Out 2008 4:30 pm
Localização: belo horizonte-mg

---Eu preciso que essa query retorne apenas uma linha para cada numero de venda mas esta retornando varias linhas mesmo colocando o distinct.

alguém pode me ajudar?

Selecionar tudo

select distinct co.numero_venda,
       co.assessoria assessoria,
       co.empresa_origem,
       co.data_vencimento,
       cl.nome,
       cl.empresa || lpad(cl.cliente, 8, '0') || tit_dep || via || digito num_cliente,
       co.data_inicio_atraso,
       (trunc(sysdate) - co.data_inicio_atraso) dias_atraso,
       co.val_prestacao,
       co.produto,
       pr.descricao,
       pa.val_saldo_devedor,
       decode(co.produto,'01',co.val_prestacao,'02',pa.val_saldo_devedor) 
  from crd.cliente   cl
      ,crd.cobranca  co
      ,crd.produto   pr
      ,crd.parcelado pa
 where co.empresa_origem = 1
   and cl.empresa        = co.empresa
   and cl.cliente        = co.cliente
   and co.val_pago       = 0
   and co.flg_operacao not in ('1', '4', '5', '9')
   and co.esta_garantido <> 'P'
   and co.produto        = pr.produto
   and co.cliente        = pa.cliente
   and co.numero_venda   = pa.numero
 order by cl.nome,co.empresa_origem,co.produto,co.numero_venda

NUMERO_VENDA	ASSESSORIA	EMPRESA_ORIGEM	DATA_VENCIMENTO	NOME	NUM_CLIENTE	DATA_INICIO_ATRASO	DIAS_ATRASO	VAL_PRESTACAO	VAL_PRESTACAO	PRODUTO	DESCRICAO	MAX(PA.VAL_SALDO_DEVEDOR)	DECODE(CO.PRODUTO,'01',MAX(CO.
0000001092	9269	1	10/10/2008	SOLANGE MARIA ZAGO	6123400000244004	10/10/2008	122	9	12,55	02	CREDIARIO	27	27
0000001092	9269	1	10/11/2008	SOLANGE MARIA ZAGO	6123400000244004	10/11/2008	91	9	12,55	02	CREDIARIO	27	27
0000001092	9269	1	10/12/2008	SOLANGE MARIA ZAGO	6123400000244004	10/12/2008	61	9	12,55	02	CREDIARIO	27	27
0000001092	9269	1	10/01/2009	SOLANGE MARIA ZAGO	6123400000244004	10/01/2009	30	9	12,55	02	CREDIARIO	27	27
0000001093	9269	1	10/10/2008	TESTE TESTE 3	        6123400000246009	10/10/2008	122	12,55	12,55	02	CREDIARIO	38,67	38,67
0000001093	9269	1	10/11/2008	TESTE TESTE 3		6123400000246009	10/11/2008	91	6,53	12,55	02	CREDIARIO	38,67	38,67
0000001093	9269	1	10/12/2008	TESTE TESTE 3		6123400000246009	10/12/2008	61	6,53	12,55	02	CREDIARIO	38,67	38,67
0000001093	9269	1	10/01/2009	TESTE TESTE 3		6123400000246009	10/01/2009	30	6,53	12,55	02	CREDIARIO	38,67	38,67
0000001093	9269	1	10/02/2009	TESTE TESTE 3		6123400000246009	10/02/2009	-1	6,53	12,55	02	CREDIARIO	38,67	38,67
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Brother,

A tua coluna "dias_atraso" está trazendo valores diferentes pro mesmo numero de venda. Por isso, o distinct não faz efeito.
elciodba
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Sex, 31 Out 2008 4:30 pm
Localização: belo horizonte-mg

Amigo mas o que fazer para ajustar isso???? para que de certo?
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

É... é isso mesmo...
E, até pra um melhor entendimento do problema, use a tag de CODE e /CODE sempre que você for postar um código:

Selecionar tudo

select distinct co.numero_venda,
                co.assessoria assessoria,
                co.empresa_origem,
                co.data_vencimento,
                cl.nome,
                cl.empresa || lpad(cl.cliente, 8, '0') || tit_dep || via || digito num_cliente, 
                co.data_inicio_atraso,
                (trunc(sysdate) - co.data_inicio_atraso) dias_atraso,
                co.val_prestacao,
                co.produto,
                pr.descricao,
                pra.val_saldo_devedor,
                decode(co.produto,'01',co.val_prestacao,'02',pra.val_saldo_devedor)
    from crd.cliente cl
        ,crd.cobranca co
        ,crd.produto pr
        ,crd.parcelado pra
 where co.empresa_origem = 1
   and cl.empresa = co.empresa
   and cl.cliente = co.cliente
   and co.val_pago = 0
   and co.flg_operacao not in ('1', '4', '5', '9')
   and co.esta_garantido <> 'P'
   and co.produto = pr.produto
   and co.cliente = pra.cliente
   and co.numero_venda = pra.numero
   order by cl.nome,
            co.empresa_origem, 
            co.produto,
            co.numero_venda        
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Pra retornar uma linha só:

Você deve retirar o campo:

Selecionar tudo

(trunc(sysdate) - co.data_inicio_atraso) dias_atraso, 
Pois ao que parece o mesmo NUMERO_VENDA você tem mais de uma co.data_inicio_atraso

está faltando algum join entre crd.cliente e crd.cobranca ??
Responder
  • Informação
  • Quem está online

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