AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 137555
Accepted
Juan Velez
Juan Velez
Asked: 2016-05-05 10:47:15 +0800 CST2016-05-05 10:47:15 +0800 CST 2016-05-05 10:47:15 +0800 CST

动态更新 SQL Server 表中的字段

  • 772

我需要对 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-server update
  • 2 2 个回答
  • 81 Views

2 个回答

  • Voted
  1. Best Answer
    donger
    2016-05-05T11:21:25+08:002016-05-05T11:21:25+08:00

    如果您的表是测试表,请尝试以下操作:

    SELECT t1.*
        ,New_FileName = t1.FileName + CASE 
            WHEN t2.seq > 1
                THEN '_' + ltrim(str(seq))
            ELSE ''
            END
    FROM test t1
    JOIN (
        SELECT ID
            ,Memeber_Number
            ,FileName
            ,seq = ROW_NUMBER() OVER (
                PARTITION BY FileName
                ,Memeber_Number ORDER BY ID
                )
        FROM test
        ) t2 ON t1.id = t2.id;
    
    • 4
  2. ConstantineK
    2016-05-05T11:02:35+08:002016-05-05T11:02:35+08:00

    这取决于你的 SQL 方言,我多次看到以下方法:

    • 制作一个临时表,插入行,并使用生成表的PK更新现有值。
    • 使用窗口函数,连接子查询中的值并更新主表。

    对于 T-SQL 中的窗口函数和子查询的示例(如果您假设 g1 是您的表而不是我刚刚发明的某些子查询):

    update g1 set g1.name = g.name
    from ( 
      select id, 
      name, 
      ROW_NUMBER() OVER(ORDER BY name ) AS [num]
    
      from (
      select 1 [id], 'bill' [name]
      union all 
      select 2, 'bob'
      union all 
      select 3, 'bob'
      union all 
      select 4, 'bob'
    ) f
    ) g
    join 
    (  
      select 1 [id], 'bill' [name]
      union all 
      select 2, 'bob'
      union all 
      select 3, 'bob'
      union all 
      select 4, 'bob'
    ) g1 on g1.id = g.id
    
    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve