Ir para conteúdo

POWERED BY:

Arquivado

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

valeriabarros

Listar linhas repetidas

Recommended Posts

Boa tarde.

 

Andei pesquisando como faço para listar registros duplicados, e consegui fazer uma grande parte, quando um ou dois registros são iguais.

Mas agora preciso listar quando todos os registros forem idênticos.

Vou montar um exemplo pra especificar melhor o que preciso:

 

Cliente

--------------------------------------------------

IdCliente | NmCliente | TelefoneCliente

---------------------------------------------------

123 | Joao Josue | 32846547

456 | Joao Jose | 82803140

456 | Joao Jose | 82803140

-----------------------------------------------------

 

Eu preciso listar esses dois registros que são tem todos os campos idênticos.

Seguindo o exemplo, tenho esse código:

 

SELECT IdCliente, NmCliente FROM Cliente GROUP BY IdCliente, NmCliente, TelefoneCliente HAVING COUNT(IdCliente) > 1 and COUNT(NmCliente) > 1 and COUT (TelefoneCliente) > 1

 

Mas ele não está me retornando os dois registros. Alguém tem alguma dica?

 

Obrigada

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

duplicados

 

select IdCliente , NmCliente  , TelefoneCliente
from Cliente 
group by dCliente , NmCliente  , TelefoneCliente
having count(*) > 1

quem são os duplicados

 

 

 

select IdCliente , NmCliente  , TelefoneCliente
from Cliente 
where (IdCliente , NmCliente  , TelefoneCliente) in (select IdCliente , NmCliente  , TelefoneCliente
                                                     from Cliente 
                                                     group by dCliente , NmCliente  , TelefoneCliente
                                                     having count(*) > 1)

 

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem lembrado A.Jr

eu só tinha rápido pois estava escrevendo um artigo justamente sobre o assunto :p

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, pra situação que descrevi a solução atende completamente.

Mas como não estou conseguindo resolver, vou tentar explicar a dificuldade dessa seleção:

 

Tenho duas tabelas:

 

Pedido e Item Pedido.

 

O primeiro ponto é listar os pedidos em que o cpf do cliente apareça mais de uma vez. Ou seja, listar pedidos que tenham sido feitos pela mesma pessoa duas ou mais vezes. Consegui com o seguinte código:

 

QueryIPedido
SELECT IdPedido FROM Pedido as p where p.NrCpfCnpjCliente IN (
SELECT NrCpfCnpjCliente FROM Pedido GROUP BY NrCpfCnpjCliente HAVING COUNT(NrCpfCnpjCliente ) >= 2
AND p.FlStatusPedido = 'P' 
)

 

Depois, consegui listar os itens que correspondem a esses pedidos:

 

QueryItem
 
SELECT * FROM ItemPedido where FkPedido IN (
SELECT IdPedido FROM Pedido as p where p.NrCpfCnpjCliente IN (
SELECT NrCpfCnpjCliente FROM Pedido GROUP BY NrCpfCnpjCliente HAVING COUNT(NrCpfCnpjCliente ) >= 2
AND p.FlStatusPedido = 'P' 
)
) 

 

 

O que preciso agora é listar os itens dos pedidos selecionados que são iguais.

Por exemplo:

------------

Pedidos

------------

20130001

20130002

 

 

---------------------

Itens pedido

---------------------

IdItem | FkPedido | NrAtividade

1 | 20130001| 123

2 | 20130002| 123

3 | 20130002| 1234

 

 

Preciso listar os Itens em que o campo NrAtividade, por exemplo, são iguais. No caso, o item 1 e 2, pois tem pedidos que correspondem a primeira condição.

 

Já estou esgotando tudo que pensei. Já tentei com having, com tabela temporária fazendo join, e comparações, mas ainda não consegui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

São clientes com mais de um pedido..

Mas o que está sendo complicado é listar os itens iguais desses pedidos..

 

Coloquei o titulo como duplicado porque pensei que seria possível localizar esses itens através desse tratamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente algo assim.

Produto pedios mais de uma vez por cliente

select NrCpfCnpjCliente, cod_produto
from pedido,item_pedido
where pedido.idpedido = item_pedido.idpedido
group by NrCpfCnpjCliente, cod_produto
having count(*) > 1 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu já consegui essa parte

 

SELECT IdPedido FROM Pedido as p where p.NrCpfCnpjCliente IN ( SELECT NrCpfCnpjCliente FROM Pedido GROUP BY NrCpfCnpjCliente HAVING COUNT(NrCpfCnpjCliente ) >= 2 AND p.FlStatusPedido = 'P'  )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isto não é um erro ?! Não ?

 

Um cliente pode fazer um Item mais de uma vez !?

 

Não seria uma linha repetida

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não..

O fluxo é assim: Cliente cadastra um pedido, e nele vários itens.

Depois de um tempo, esse pedido não atendido passa a fica com status pendente.

 

Logo depois, ele cadastra um novo pedido, com status ativo, e cadastra outros itens.

 

Possivelmente, esse ultimo pedido pode ter itens já pedidos no pedido anterior(o que está pendente). Se isso acontecer, eu listo os pedidos cujos itens tem um ou mais itens repetidos nos dois pedidos.

Não é um erro, é uma possibilidade do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já pensou em usar uma function ?

 

Recebe por parametro CLEINTE, PEDIDO e PRODUTO e

busca se acha este produto em outro PEDIDO do CLIENTE

diferente do PEDIDO passado por parametro.

 

Caso ache retorna 1 , senão retorna 0.

 

A query busca com esta function.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei legal a ideia do Motta

 

Montei uma função com base no que eu entendi da sua regra de negócio

 

Você passa o pedido e o nr da Atividade...

 

O que a função faz retorna todos pedidos abertos (diferentes do pedido atual) nos quais a atividade selecionada aparece

 

create function pedidorepedido (
	  @idpedido  varchar(1000)
	 ,@nratividade varchar(1000)
 ) returns @tb table (IdItem  
					,FkPedido  
					,NrAtividade)
as
begin

	declare @nrcpfcnpjcliente   varchar(1000)

	select @nrcpfcnpjcliente =  nrcpfcnpjcliente from pedido where idpedido  = @idpedido

	insert into @tb 
		(iditem ,fkpedido ,nratividade)
	select 
		iditem ,fkpedido ,nratividade 
	from	
		item_pedido
	where 
		nratividade = @nratividade
		exists (select '' 
				from pedido 
				where 
						pedido.idpedido = item_pedido.idpedido 
					and pedido.idpedido <> @idpedido
					and pedido.nrcpfcnpjcliente = @nrcpfcnpjcliente 
					and pedido.flstatuspedido = 'p'
					)

	returns 
	
end

Espero que ajude

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.