Array
(
)

UPDATE COM SELECT NO SQL SERVER

William Pereira
   - 12 ago 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á!

Regis
   - 12 ago 2016

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

David Styveen
|
MVP
Pontos: 545
    26 ago 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?