SELECT COM DADOS DUPLICADOS

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
marcelo_oracle
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 18 Mar 2014 5:26 pm

Selecionar tudo

CD_AVISO CD_PRESTADOR	CD_CIRURGIA NM_PRESTADOR SN_PRINCIPAL   CD_CIRURGIA_AVISO
 2959---------435------------------515------------------ANDRE------------------S------------------6116
 2959---------435------------------2243------------------ANDRE-----------------S------------------6117
 2959---------435------------------1452------------------ANDRE-----------------S------------------6117
 2959---------700------------------515------------------RICARDO----------------N------------------6116
 2959---------700------------------2243------------------RICARDO--------------N------------------6117
tenho esta tabela acima, os nomes podem ter 2 duplicidades como acima, ou ainda 3 ou 4 duplicidade, mas
preciso que me retorne somente um de cada nome, não consigo filtrar porque as informações são duplicadas, então sempre aparece dois de cada. Pode ser qualquer nome o primeiro ou segundo.

veja andre triplicado e Ricardo duplicado. então precisaria de:

Selecionar tudo

2959---------435------------------1452------------------ANDRE-----------------S------------------6117
2959---------700------------------515------------------RICARDO----------------N------------------6116
pode ser qualquer um, mas estou achando que não da certo viu...
Editado pela última vez por marcelo_oracle em Seg, 31 Mar 2014 10:18 am, em um total de 1 vez.
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,já pensou em utilizar as funções DISTINCT e UNIQUE no seu select ?

Selecionar tudo

select distinct xy from tablea; 

select unique xy from tablea; 
marcelo_oracle
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 18 Mar 2014 5:26 pm

mas usando distinct a linha toda não teria que ser igual para não ocorrer a duplicidade?? tem campos que são diferentes, então o distict sempre vai mostrar as linhas duplicadas ne??? desculpe se entendi errado sua solução.
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Verdade e faz sentido , o distinct ordena as linhas resultantes para identificar e eliminar valores repetidos,mas nesse caso o que me parece é que ele quer que retorne apenas uma vez o nome do prestador ,imagino que a chave estrangeira (não sei essa é uma tabela de domínio) seja o CD_PRESTADOR ,porém ele realizou dois tipos de cirurgias diferentes e acabou gerando dois registros diferentes e sem duplicidade .
Lucas PM Carvalho
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 11 Mar 2014 10:27 am

Bom dia pessoal,

Se você agrupar os dados utilizando o "Group By" não resolveria o problema ?

falou Abraços.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Marcelo,

Será que você poderia descrever com exemplos o que você precisa?

Tipo .. montar uma massa com de 2 duplicidades à 4 duplicidades, e nos mostrar os resultados que precisa que apareçam? Talvez com este exemplo, o pessoal se sinta mais à vontade para dar sugestões.

Abraços,

Sergio Coutinho
Jota
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 17 Jun 2009 3:18 pm
Localização: Blumenau - SC
Jonatas Jaqmam Pereira
Analista Desenvolvedor de Sistemas

Marcelo, vi que seu problema é o cd_cirurgia que é diferente, se usar distinct não vai adiantar por causa deste campo.

Mas se você usar o MIN OU MAX e fizer desta forma pode lhe ajudar:

Selecionar tudo

SELECT CD_AVISO,
            CD_PRESTADOR,
            MIN(CD_CIRURGIA),
            NM_PRESTADOR, 
            SN_PRINCIPAL, 
            CD_CIRURGIA_AVISO
  FROM TABELA_DO_MARCELO
GROUP BY CD_AVISO,
                CD_PRESTADOR, 
                 NM_PRESTADOR, 
                 SN_PRINCIPAL, 
                 CD_CIRURGIA_AVISO
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

No caso do group by com min no "CD_CIRURGIA" ainda mantera nome duplicado por "CD_CIRURGIA_AVISO" .

Particularmente, gosto de realizar deduplicação via OVER PARTITION .

EX:

Selecionar tudo

SELECT CD_AVISO,
            CD_PRESTADOR,
            CD_CIRURGIA,
            NM_PRESTADOR, 
            SN_PRINCIPAL, 
            CD_CIRURGIA_AVISO FROM (

SELECT CD_AVISO,
            CD_PRESTADOR,
            CD_CIRURGIA,
            NM_PRESTADOR, 
            SN_PRINCIPAL, 
            CD_CIRURGIA_AVISO,
-- PARTICIONANDO NOME POR ULTIMO CD_CIRURGIA E ULTIMO CD_CIRURGIA_AVISO
            ROW_NUMBER()
            OVER (PARTITION BY NM_PRESTADOR ORDER BY CD_CIRURGIA  DESC, CD_CIRURGIA_AVISO DESC) AS ORD)
WHERE ORD = 1
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Brother,

Esse erro ocorre por que tem mais de um prestador vinculado a cirurgia. Já tive o mesmo problema. (Pelo que estou vendo você usa o sistema MV certo? )

Coloca para buscar somente os prestadores que estão vinculados no aviso como 01 - cirurgião...Assim você evitar de duplicar os resultados.
Responder
  • Informação
  • Quem está online

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