On Mon, Aug 13, 2012 at 7:41 PM, Edson - Listas <edson...@gmail.com> wrote:

> Olá Pessoal,
>
> O meu select abaixo, esta duplicando as linhas, mesmo usando DISTINCT.
>
> select DISTINCT  a.cd_fil,a.cd_ordem,a.dt_abertura,
>         a.cd_cli,f.nm_cli,f.de_endereco,f.fone,
>         a.vlr_final_os,a.vlr_desc_os,a.vlr_outros,
>         a.vlr_tot_prod,a.vlr_tot_serv,a.servico_solicitado,
>         a.de_ocorrencia,
>         h.de_cid,a.cd_funcio,e.nm_funcio,b.cd_prod,
>         g.de_prod,b.qtde_prod,b.vlr_unit_prod,b.perc_desc_prod,
>         b.vlr_desc_prod,b.vlr_prod,b.total_prod,
>         c.cd_servico,d.de_servico,c.qtd_serc,c.vlr_unit,
>         c.perc_desc_serv,c.vlr_desc,c.vlr_serv,
>         c.sub_total,
>         CASE
>              WHEN a.fg_tipo_os = 'INS' THEN 'INSTALAÇÃO'
>              WHEN a.fg_tipo_os = 'MAN' THEN 'MANUTENÇÃO'
>              WHEN a.fg_tipo_os = 'MAN' THEN 'MANUTENÇÃO'
>              WHEN a.fg_tipo_os = 'ACO' THEN 'À COBRAR'
>              WHEN a.fg_tipo_os = 'GAR' THEN 'GARANTIA'
>              WHEN a.fg_tipo_os = 'CON' THEN 'CONTRATO'
>              WHEN a.fg_tipo_os = 'ORC' THEN 'ORÇAMENTO'
>              ELSE 'OUTROS'
>          END tipo_os,
>          CASE
>              WHEN a.fg_status_os = 'AB' THEN 'ABERTA'
>              WHEN a.fg_status_os = 'FC' THEN 'FECHADA'
>              ELSE 'INVÁLIDA'
>          END status_os
>
> from osservhe a inner JOIN  osprodut b
>      on a.cd_ordem = b.cd_ordem
>    inner join cliente f
>      on a.cd_cli = f.cd_cli
>     inner join vendfunc e
>      on a.cd_funcio = e.cd_funcio
>    inner join osservde c
>      on a.cd_ordem = c.cd_ordem
>    left join produto g
>      on b.cd_prod = g.cd_prod
>    left join servicos d
>      on c.cd_servico = d.cd_servico
>    inner join cidade h on
>    f.cd_cid = h.cd_cid
>    order by a.dt_abertura,a.cd_ordem
>
>
Tem certeza? Não são campos parecidos, mas não idênticos (p.e. com espaços
extras)?

Veja que o DISTINCT como você está usando tenta verificar *todas as colunas*,
se quiser só alguns campos tem que ser o DISTINCT ON, talvez você queria os
que estão no ORDER BY:

    select DISTINCT ON (a.dt_abertura,a.cd_ordem)
a.cd_fil,a.cd_ordem,a.dt_abertura,
    ...

Atenciosamente,
--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a