Ir para conteúdo

Arquivado

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

rodnois

Exclusão usando subconsulta na cláusula HAVING

Recommended Posts

Ola galera,

Estou tendo um problemão na exclusao de registros de duplicados.

Comecei a fazer estágio em uma empresa e o banco de dados esta cheio de faturamentos duplicados, alguns associados pagaram um e ficaram com outro em aberto, alguns nao pagaram nenhum e outros tiveram o faturamento duplicado excluido quando encontrado.

 

Estou precisando de um sql para poder EXCLUIR todos os faturamentos referentes a 12/2013 que forem duplicados(ou seja, que o count seja maior que dois), sendo que eles devem estar ativos.

Com isso, na consulta eu preciso retirar somente aqueles que não foram pagos, pois ha associados que pagaram 1 faturamento e os associados que possuem dois faturamentos nao pagos eu preciso retirar 1 deles.

Alguem tem uma ideia ai?

 

Eu tenho o sql que lista todos os asociados que ainda tem dois fatura referentes a 12/2013 ativos

SELECT autorizacao, COUNT(cdfaturamento) as qtefat
FROM faturamento
WHERE (mesanoreferencia = '12/2013')
GROUP BY Autorizacao, mesanoreferencia, idativo
HAVING (COUNT(cdfaturamento) > 1) and idativo =1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Delete faturamento
Where (mesanoreferencia = '12/2013')
And idativo=1

and autorizacao in
(
SELECT autorizacao
FROM faturamento
WHERE (mesanoreferencia = '12/2013')
And idativo=1
GROUP BY Autorizacao, mesanoreferencia, idativo
HAVING (COUNT(cdfaturamento) > 1)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Delete faturamento

Where (mesanoreferencia = '12/2013')

And idativo=1

and autorizacao in

(

SELECT autorizacao

FROM faturamento

WHERE (mesanoreferencia = '12/2013')

And idativo=1

GROUP BY Autorizacao, mesanoreferencia, idativo

HAVING (COUNT(cdfaturamento) > 1)

)

 

Sim motta isto ai ja fiz!

So que ha situações que existem dois faturamentos não pagos e eu queria retirar um deles.

E ha situações que existem um pago e um não pago.

Neste caso vai excluir todo mundo que tem mais de um faturamento ativo.

Eu queria fazer um filtro dentro desta clausula having mas nao estou consiguindo.

Por enquanto o jeito ta sendo excluir todos os faturamentos não pagos e cria-los de novo, mas não queria fazer isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue aqui um exemplo em Oracle para deletar duplicados.

 

Rowid é um identificador de linha única do Oracle.

 

Não sei a síntaxe equivalente em SqlServer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem "n" meios de se fazer mas estou sem ambiente pela parte da manha.

Tente deste modo:

http://forum.imasters.com.br/topic/220847-verificando-e-excluindo-duplicidades-com-e-sem-chave/

 

é um tópico antigo, mas já é uma luz

 

[]´s

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.