Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rodrigopeixoto2005

Comparar linhas da mesma tabela e contar

Recommended Posts

Boa Tarde.
Tinha postado anteriormente nesse fórum porém o exemplo que utilizei não estava muito claro mas me ajudou bastante em outra coisa.
Enfim, aqui esta um exemplo simples de minha tabela:

 

NOME    CODIGO

JOSE       10
JOSE       10
JOSE       10
JOSE       10
MARIA      56
MARIA      56
PEDRO    12
PEDRO    12
PEDRO    12
ANTONIO 2

 

O que preciso é comparar linha por linha e verificar se as linhas são iguais
se forem iguais, adicione 1 ao contador na coluna ao lado conforme o exemplo a seguir.

 

NOME    CODIGO CONTADOR

JOSE      10           1
JOSE      10           2
JOSE      10           3
JOSE      10           4     
MARIA     56          1
MARIA     56          2
PEDRO   12          1
PEDRO   12          2
PEDRO   12          3
ANTONIO 2           1

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ou-

 

SELECT NOME,CODIGO,COUNT(*) QTD
FROM TABELA
GROUP BY NOME,CODIGO

para fazer o contador (sequencial) daria um pouco mais de trabalho.

 

até aí basta ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Motta,

Primeiramente obrigado pela atenção!

Na verdade o contador (sequencial) é o principal..

A query "SELECT NOME,CODIGO,COUNT(*) QTD FROM TABELA GROUP BY NOME,CODIGO" eu já tinha feito, o problema

é que nessa query é utilizado o agrupamento e o contador (sequencial) não pode ser agrupado.

 

De qualquer forma agradeço e fico no aguardo caso consiga alguma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explicando melhor a situação.....

Por exemplo

tenho uma tabela com cpf ,nome e valor
existem situações onde um CPF pode ter mais de uma razão social porém com os mesmos valores
tipo assim:
cpf | nome | valor
123 | Zé | 200,00
123 | José | 200,00
123 | Joe | 200,00

Zé, josé e joe são a msm pessoa só q com razões sociais diferentes porém com o msm CPF e eu preciso de um jeito de trazer só um desses caras, seja la qual for afinal são a msm pessoa .

Compartilhar este post


Link para o post
Compartilhar em outros sites

CPF é único, CNPJ pode ter mais de um mas somente para a raiz

cnpj 123456789/0001-01 - Padaria no Manuel - Matriz
cnpj 123456789/0002-02 - Padaria no Manuel - Filial Centro
cnpj 123456789/0003-03 - Padaria no Manuel - Filial Copa

Se a tabela tem cnpj e nome o ideal seria uma normalização desta tabela, algumas soluções em sql podem resolver o problema mas a query cmeça a ficar complexa pois começa a usar subselect e max e coisas do gênero.

 

Uma soluçao simples pode ser

 

 

select substr(cnpj,1,11) cnpf,sum(valor) valor
from tabela
group by substr(cnpj,1,11)

mas se perderia a informação do nome

 

Como está a modelagem ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Motta,

O resultado que a query deve retornar somente um dos 3 resistros.



Melhorando e simplificando o exemplo

 

cpf | nome | valor
123 | Zé | 200,00
123 | José | 200,00
123 | Joe | 200,00
456 | Ana | 400,00
456 | Anne | 400,00
456 | Any | 400,00
O resultado seria somente uma de cada informação replicada.
O resultado desejado seria:
cpf | nome | valor
123 | Zé | 200,00
456 | Ana | 400,00

Compartilhar este post


Link para o post
Compartilhar em outros sites

min ou max e subselect ...

select cpf,nome,valor
from tabela t1
where nome = (select min(nome)
              from tabela t2
              where t2.cpf = t1.cpf)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.