UPDATE COM SELECT NO SQL SERVER

SQL Server

12/08/2016

Caros amigos, boa tarde!

Sou novo aqui, inclusive e meu primeiro post e estou com um grande problema.

Preciso zerar os registros duplicados de uma tabela (Fol_Ficha_Financeira), eu consegui fazer um SELECT para descobrir quais são os valores duplicados, porém não consigo atualizar os valores com 0.

Com o select abaixo, consegui encontrar os valores duplicados.

Eu pensei atualizar o campo FOL_FICHA_FINANCEIRA.vl_valor para zero e

SELECT FOL_FUNCIONARIO.nu_matricula, FOL_VERBA.cod_verba, FOL_VERBA.nm_verba, FOL_FICHA_FINANCEIRA.id_referencia, FOL_FICHA_FINANCEIRA.id_processo, FOL_FICHA_FINANCEIRA.nu_quantidade, FOL_FICHA_FINANCEIRA.vl_valor, COUNT(CAST(FOL_FUNCIONARIO.nu_matricula AS VARCHAR (20)) +'-'+ FOL_FICHA_FINANCEIRA.id_referencia +'-'+CAST(id_processo AS VARCHAR(2))) AS CONTAGEM

FROM FOL_FUNCIONARIO INNER JOIN (FOL_FICHA_FINANCEIRA INNER JOIN FOL_VERBA ON FOL_FICHA_FINANCEIRA.id_verba = FOL_VERBA.id_verba) ON FOL_FUNCIONARIO.id_funcionario = FOL_FICHA_FINANCEIRA.id_funcionario

WHERE FOL_FICHA_FINANCEIRA.id_referencia = '022015'

GROUP BY FOL_FUNCIONARIO.nu_matricula, FOL_VERBA.cod_verba, FOL_VERBA.nm_verba, FOL_FICHA_FINANCEIRA.id_referencia, FOL_FICHA_FINANCEIRA.id_processo, FOL_FICHA_FINANCEIRA.nu_quantidade, FOL_FICHA_FINANCEIRA.vl_valor

HAVING COUNT(CAST(FOL_FUNCIONARIO.nu_matricula AS VARCHAR (20)) +'-'+ FOL_FICHA_FINANCEIRA.id_referencia +'-'+CAST(id_processo AS VARCHAR(2)))>1

Utilizando UPDATE coloquei o código abaixo

UPDATE FOL_FICHA_FINANCEIRA SET VL_VALOR = 0

FROM FOL_FUNCIONARIO INNER JOIN (FOL_FICHA_FINANCEIRA INNER JOIN FOL_VERBA ON FOL_FICHA_FINANCEIRA.id_verba = FOL_VERBA.id_verba) ON FOL_FUNCIONARIO.id_funcionario = FOL_FICHA_FINANCEIRA.id_funcionario

WHERE FOL_FICHA_FINANCEIRA.id_referencia = '022015'

GROUP BY FOL_FUNCIONARIO.nu_matricula, FOL_VERBA.cod_verba, FOL_VERBA.nm_verba, FOL_FICHA_FINANCEIRA.id_referencia, FOL_FICHA_FINANCEIRA.id_processo, FOL_FICHA_FINANCEIRA.nu_quantidade, FOL_FICHA_FINANCEIRA.vl_valor

HAVING COUNT(CAST(FOL_FUNCIONARIO.nu_matricula AS VARCHAR (20)) +'-'+ FOL_FICHA_FINANCEIRA.id_referencia +'-'+CAST(id_processo AS VARCHAR(2)))>1

Mas mesmo assim não deu.

Muito obrigado pela ajuda desde já!
William Pereira

William Pereira

Curtidas 0

Respostas

Carlos Faria

Carlos Faria

12/08/2016

Amigo
O campo que vc esta atualizando é Chave primaria , se for não vai atualizar ok
GOSTEI 0
David Styveen

David Styveen

12/08/2016

Boa tarde, Willian.

Ele não está deixando fazer o update por conta do Group By. Tirando as duas cláusulas já resolveria, porém acredito que tenha que zerar apenas um dos registros duplicados, correto?
Há uma forma de identificar esses registros de forma separada?
GOSTEI 0
POSTAR