Distinct com critério

SQL Server

15/12/2014

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

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

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....
GOSTEI 1

Mais Respostas

Claudio Lopes

Claudio Lopes

15/12/2014

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

caso contrário você precia também dos valores diferentes do PICM 4?
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

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.
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

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.
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

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.
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

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.
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

[img]http://arquivo.devmedia.com.br/forum/imagem/402352-20141217-144331.jpg[/img]
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

O que preciso seria isso:

[img]http://arquivo.devmedia.com.br/forum/imagem/402352-20141217-144409.jpg[/img]
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

15/12/2014

Utilize o mesmo SQL da penúltima imagem, mas sem incluir a coluna SD1010.D1_DTDIGIT...
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

O problema nesse caso eh o agrupamento das datas.

por isso ainda repete.
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

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
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

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.
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

o que mais vc precisa e esta faltando?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

15/12/2014

Por nada José!

Se quiser descrever o que está faltando, talvez possamos ajudá-lo....
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

Boa tarde. Me perdoem pela inatividade, porém pode-se fechar este post. Muito obrigado.
GOSTEI 0
Alex Lekao

Alex Lekao

15/12/2014

resolveu!?
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

Resolvemos de outra forma. Obrigado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

15/12/2014

Você poderia compartilhar conosco a solução encontrada?
GOSTEI 0
José Jacinto

José Jacinto

15/12/2014

Na verdade o ERP usado na empresa acabou nos atendendo sem a necessidade de montar o BI pelo SQL SERVER. Obrigado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

15/12/2014

Ok.. Obrigada por responder!
GOSTEI 0
POSTAR