Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 504718
            [titulo] => Distinct com critério
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-12-18 10:42:51
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 262490
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marisiana Battistella
            [Apelido] => Marisiana
            [Foto] => 262490_20141229171421.jpg
            [Conteudo] => É isso Alex!
Se não incluir a data no SELECT e no GROUP BY não vai detalhar a informação pela data.... ) )

Distinct com critério

José Jacinto
   - 15 dez 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:
Exemplo de tabela (Clique na imagem para abrir em uma nova janela)

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.

Post mais votado

Marisiana
   - 18 dez 2014

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

Din
|
MVP
Pontos: 45
    15 dez 2014

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

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

José Jacinto
   - 16 dez 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.

Alex Lekao
   - 16 dez 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.

#Código

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.

José Jacinto
   - 16 dez 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.

Alex Lekao
   - 16 dez 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.

#Código

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.

José Jacinto
   - 17 dez 2014

Clique na imagem para abrir em uma nova janela

José Jacinto
   - 17 dez 2014

O que preciso seria isso:

Clique na imagem para abrir em uma nova janela

Marisiana
   - 17 dez 2014

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

Alex Lekao
   - 17 dez 2014

O problema nesse caso eh o agrupamento das datas.

por isso ainda repete.

Alex Lekao
   - 18 dez 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

José Jacinto
   - 22 dez 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.

Alex Lekao
   - 22 dez 2014

o que mais vc precisa e esta faltando?

Marisiana
   - 24 dez 2014

Por nada José!

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

José Jacinto
   - 23 mar 2015

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

Alex Lekao
   - 23 mar 2015

resolveu!?

José Jacinto
   - 23 mar 2015

Resolvemos de outra forma. Obrigado.

Marisiana
   - 25 mar 2015

Você poderia compartilhar conosco a solução encontrada?

José Jacinto
   - 26 mar 2015

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

Marisiana
   - 26 mar 2015

Ok.. Obrigada por responder!