Distinct com critério

15/12/2014

0

Boa noite.

Na verdade estou abrindo este post por não saber como procurar respostas as minhas necessidades, pois é algo que nem sei se é possível.

Preciso selecionar dados eliminando registros repetidos em uma tabela. Por isso pesquisei sobre a opção DISTINCT. Ok. Porém... preciso eliminar os registros repetidos mas mantendo o registro repetido que tenha um determinado valor.

Por exemplo:

[img:descricao=Exemplo de tabela]http://arquivo.devmedia.com.br/forum/imagem/402352-20141215-190803.jpg[/img]


Veja a coluna Codigo. As linha que levam 425a-5. Este código está duplicado e preciso deixar ele único na consulta, porém, preciso preservar a linha que tenha o valor 4 na coluna PICM.

Preciso deixar sem repetições, mas que fiquem os registros que tenha o valor 4 na coluna PICM.

O mesmo acontece nas duas ultimas linhas. O código 528a-5 se repetem. Preciso apenas da linha que tem o valor 4 na coluna PICM.

Espero ter sido claro o suficiente e agradeço desde já a ajuda de algum colaborador deste comunidade.

Muito obrigado.
José Jacinto

José Jacinto

Responder

Post mais votado

18/12/2014

É isso Alex!
Se não incluir a data no SELECT e no GROUP BY não vai detalhar a informação pela data....

Marisiana Battistella

Marisiana Battistella
Responder

Mais Posts

15/12/2014

Claudio Lopes

Primeiro vou pela logica... já colocou "WHERE PICM = 4"?

caso contrário você precia também dos valores diferentes do PICM 4?
Responder

16/12/2014

José Jacinto

Opa. Obrigado pela força Din.

Eu preciso dos outros valores também. Quero eliminar todos os repetidos mantendo os registros que tenham valor 4 mas em registros que tenham outros valores também preciso preserva-los.


Obrigado.
Responder

16/12/2014

Alex Lekao

Ola Jose, bom dia!!!

Deixa eu entender melhor sua situacao, a coluna PICM vc precisa preserva-la, porque a necessidade de preservar especificamente o 4 e nao o 12, por exemplo, nao seria o caso de soma-las?

Normalmente vc poderia utilizar uma opcao chamada group by, que acredito resolveria o seu problema.

Segue abaixo uma sugestao, imaginando que o que vc queira eh que a Coluna PICM apresente sempre o menor valor da coluna.

select
   codido,
   un,
   min(picm) as picm,
   dtdigit
from sua_tabela
Where dtdigit between 'uma data inicial' and 'uma data final'
group by codigo,un,dtdigit


Como estou inserindo o codigo direto sem pensar muito nem testar, se der erro acusando a coluna picm, coloque-a tambem no group by.

Espero ter ajudado.

Abraco.
Responder

16/12/2014

José Jacinto

Bom dia a todos,

A situação é a seguinte:

Tenho uma lista de itens que são comprados de fornecedores e ao inserir em meu sistema estes itens vão sendo gravados na tabela a cada compra. Por isso podem se repetir. A coluna PICM é a coluna que recebe a alíquota de ICMS. Como são itens comprados de fornecedores diferentes estes itens são comprados com alíquotas diferentes variando entre 4 e 12.

A minha necessidade é a seguinte:

Preciso relacionar todos estes itens sem repeti-los. Todos os itens sem exceção. Mas se algum item já recebeu a alíquota de 4% em alguma compra eu queria que o SELECT pegasse este registro montando assim uma lista de todos os itens mas usando o registro com 4% onde ocorreu.

Resumindo:

O select pega todos eliminando repetidos, mas onde encontrar itens com o valor 4 no PICM eu queria usar este registro.

Espero ter esclarecido. Obrigado a todos. Aguardo.
Responder

16/12/2014

Alex Lekao

Oi Jose,

Nesse caso, o que vc precisa eh especificamente os itens com 4% de aliquota de icms.

Este caso, vc usa a sugestao dada pelo Din, e o agrupamento que sugeri, o codigo ficara como abaixo.

select
   codido,
   un,
   picm,
   dtdigit
from sua_tabela
Where dtdigit between 'uma data inicial' and 'uma data final'
and picm = 'valor da aliquota'
group by codigo,un,picm,dtdigit


Espero ter ajudado.

Abraco.
Responder

17/12/2014

José Jacinto

[img]http://arquivo.devmedia.com.br/forum/imagem/402352-20141217-144331.jpg[/img]
Responder

17/12/2014

José Jacinto

O que preciso seria isso:

[img]http://arquivo.devmedia.com.br/forum/imagem/402352-20141217-144409.jpg[/img]
Responder

17/12/2014

Marisiana Battistella

Utilize o mesmo SQL da penúltima imagem, mas sem incluir a coluna SD1010.D1_DTDIGIT...
Responder

17/12/2014

Alex Lekao

O problema nesse caso eh o agrupamento das datas.

por isso ainda repete.
Responder

18/12/2014

Alex Lekao

nao vejo outra solucao. rsrsr

Talvez se for realmente necessario, ai teria que utilizar uma subselect talvez, mas se colocar, vai repetir, nao tem jeito. rsrs
Responder

22/12/2014

José Jacinto

Olá pessoal. Obrigado pela ajuda. Era a data mesmo. Porém, o objetivo que queria alcançar ainda não foi possível, mas já consigo atender a minha necessidade. Obrigado pela força.
Responder

22/12/2014

Alex Lekao

o que mais vc precisa e esta faltando?
Responder

24/12/2014

Marisiana Battistella

Por nada José!

Se quiser descrever o que está faltando, talvez possamos ajudá-lo....
Responder

23/03/2015

José Jacinto

Boa tarde. Me perdoem pela inatividade, porém pode-se fechar este post. Muito obrigado.
Responder

23/03/2015

Alex Lekao

resolveu!?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar