Distinct com critério
15/12/2014
0
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
Post mais votado
18/12/2014
Se não incluir a data no SELECT e no GROUP BY não vai detalhar a informação pela data....
Marisiana Battistella
Mais Posts
15/12/2014
Claudio Lopes
caso contrário você precia também dos valores diferentes do PICM 4?
16/12/2014
José Jacinto
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.
16/12/2014
Alex Lekao
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.
16/12/2014
José Jacinto
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.
16/12/2014
Alex Lekao
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.
17/12/2014
José Jacinto
17/12/2014
José Jacinto
[img]http://arquivo.devmedia.com.br/forum/imagem/402352-20141217-144409.jpg[/img]
17/12/2014
Marisiana Battistella
17/12/2014
Alex Lekao
por isso ainda repete.
18/12/2014
Alex Lekao
Talvez se for realmente necessario, ai teria que utilizar uma subselect talvez, mas se colocar, vai repetir, nao tem jeito. rsrs
22/12/2014
José Jacinto
24/12/2014
Marisiana Battistella
Se quiser descrever o que está faltando, talvez possamos ajudá-lo....
23/03/2015
José Jacinto
Clique aqui para fazer login e interagir na Comunidade :)