我需要对 Sql Server 表进行 1 次更新。
该表有一个唯一的 ID,包含一个成员编号字段和一个文件名字段,它告诉我们成员数据来自哪个文件。
我需要做的是将 [Filename] 值更新为与历史文件中多次出现的特定会员编号相关的所有记录都不同。
因此,在下图中,编号为 123 的会员在表中有 3 条记录,其 FileName 值作为历史记录。我需要每个成员编号记录的文件名值是唯一的,因此我需要该成员的文件名值是 History、History_2 和 History_3,而不是所有 3 条记录的 History。
我很确定这可能与 SQL 有关并且目前正在处理它,但想知道是否有人遇到过类似的表更新需求并且有一些建议或代码我可以稍微修改以获得我想要的结果。
这是我用来识别需要更新记录的会员编号的代码:
SELECT Member_Number, COUNT(*) CountNumber
FROM mytable
WHERE [FileName] = 'History'
GROUP BY Member_Number
HAVING COUNT(*) > 1
进度更新:
到目前为止,我得到了以下代码,但我必须指定实际的会员号码。我想我需要找到一种方法使下面的代码循环遍历所有会员号码。表中大约有1000+个会员号需要更新。
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
如果您的表是测试表,请尝试以下操作:
这取决于你的 SQL 方言,我多次看到以下方法:
对于 T-SQL 中的窗口函数和子查询的示例(如果您假设 g1 是您的表而不是我刚刚发明的某些子查询):