Preciso fazer uma atualização 1 vez de uma tabela Sql Server.
A tabela tem um ID exclusivo, contém um campo de número de membro e um campo FileName que nos informa de qual arquivo os dados do membro vieram.
O que preciso fazer é atualizar o valor [Filename] para ser diferente para todos os registros pertencentes a um número de membro específico que estava presente no arquivo histórico mais de uma vez.
Portanto, na imagem abaixo, o membro número 123 possui 3 registros na tabela que possuem o valor FileName como histórico. Eu preciso que o valor de Filename seja exclusivo por registro de número de membro, então eu precisaria que os valores de Filename para este membro fossem History, History_2 e History_3, em vez de History para todos os 3 registros.
Tenho certeza de que isso é possível fazer com SQL e atualmente estou trabalhando nisso, mas queria saber se alguém encontrou uma necessidade de atualização de tabela semelhante e teve algum conselho ou código que posso modificar ligeiramente para obter os resultados desejados.
Este é o código que uso para identificar o número do membro que possui registros que precisam ser atualizados:
SELECT Member_Number, COUNT(*) CountNumber
FROM mytable
WHERE [FileName] = 'History'
GROUP BY Member_Number
HAVING COUNT(*) > 1
Atualização de progresso:
Eu tenho o código abaixo até agora, mas estou tendo que especificar o número real do membro. Acho que preciso encontrar uma maneira de fazer o código abaixo percorrer todos os números dos membros. Existem cerca de 1.000 números de membros que precisam ser atualizados na tabela.
SELECT *, t1.[FileName] + '_' + CAST(RN AS VARCHAR(50)) FROM
(
SELECT (ROW_NUMBER() OVER (ORDER BY(SELECT 1))) RN ,* FROM mytable WHERE Member_Number = 'BAY391'
) AS t1
WHERE RN > 1
Se sua tabela for teste, tente isto:
Depende do seu dialeto de SQL, muitas vezes já vi as seguintes abordagens:
Para obter um exemplo de funções de janela e subconsultas em T-SQL (se você assumir que g1 é sua tabela e não alguma subconsulta que acabei de inventar):