首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用SQL update语句为每个标记记录值增加值?

如何使用SQL update语句为每个标记记录值增加值?
EN

Stack Overflow用户
提问于 2020-04-27 06:51:21
回答 1查看 116关注 0票数 1

我正在执行SSIS进程,该进程将数据加载到表中,并使用execute SQL语句作为执行的最后一个组件,根据内容列的值更新标记值。一个例子是

代码语言:javascript
运行
AI代码解释
复制
update [payments].[MTFileValidationData_UAT]
set TAG = 'Header'
where left(content,3) = '{1:' and [TransactionId] = ?

这实际上是为一系列不同的标签所做的。一旦完成,就有一个名为FileSequenceNumber的列,需要为每个标记更新一个编号,这样我最终可以将UAT和生产文件进行比较,以便进行测试。

我还需要更新列FileSequenceNumber,为每个文件名提供每个标记的顺序编号。

预期结果:

代码语言:javascript
运行
AI代码解释
复制
RowID | TransactionId | FileName | FileType | Tag | Content | Location | FileSequenceNumber |
------+---------------+----------+----------+-----+---------+----------+--------------------+
1        9052312        ABCFile    NULL       Header   XXX     October           1
2        9052312        ABCFile    NULL       Header   ZZZ     October           2
3        9052312        ABCFile    NULL       Header   YYY     October           3
3        9052312        ABCFile    NULL       32B   YYY        October           1
3        9052312        ABCFile    NULL       32B   YYY        October           2
3        9052312        ABCFile    NULL       32B   YYY        October           3       
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 07:59:39

我相信您希望使用Server 2012+提供的出色的窗口功能。具体来说,

代码语言:javascript
运行
AI代码解释
复制
UPDATE
    T
SET
   FileSequenceNumber = ROW_NUMBER() OVER (PARTITION BY T.Tag ORDER BY RowID)
FROM
    dbo.myTable AS T;

每次标签更改时,partition by都会重置计数器。

order by指定如何在标记列中生成序列。

正如注释中所指出的,窗口函数只能出现在select或oder by子句中,因此我们必须进行修改以满足标准。用于工作复制的DBFiddle 2019&fiddle=d731c14c9e15d70eb3b1d34f7b0f61a8

代码语言:javascript
运行
AI代码解释
复制
UPDATE
    T
SET
    T.FileSequenceNumber = TI.FileSequenceNumber
FROM
    dbo.SO_61461648 AS T
    INNER JOIN
    (
    SELECT
        FileSequenceNumber = ROW_NUMBER() OVER (PARTITION BY TI.Tag ORDER BY TI.RowID)
    ,   TI.RowID
    FROM
        dbo.SO_61461648 AS TI
    ) aS TI
    ON TI.RowID = T.RowID;

如果所提供的数据是准确的,并且有4行具有相同的RowID,那么您将需要采用一种繁重的方法并转储表并重新加载它。

代码语言:javascript
运行
AI代码解释
复制
-- Heavy handed approach to dump the table and reload with new value in case RowID is not unique

declare @Intermediary table
(
    RowID int NOT NULL
,   Tag varchar(30) NOT NULL
);
    DELETE T
        OUTPUT DELETED.RowID, DELETED.Tag
        INTO @intermediary(RowID, Tag)
    FROM
        dbo.SO_61461648 AS T;

INSERT INTO
    dbo.SO_61461648
SELECT
    D.*
,    ROW_NUMBER() OVER (PARTITION BY D.Tag ORDER BY D.RowID)
FROM @Intermediary AS D;

SELECT * FROM dbo.SO_61461648 AS T order by RowID, FileSequenceNumber;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61461648

复制
相关文章
SQL UPDATE 语句
SQL UPDATE 语句 Update 语句用于修改表中的数据。 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 Person: LastName FirstName Address City Gates Bill Xuanwumen 10 Beijing Wilson Champs-Elysees 更新某一行中的一个列 我们为 lastname 是 "Wilson" 的人添加 firstname: UPDATE Person SET FirstN
子润先生
2021/07/01
2.2K0
记录个超级Update语句
1 -- UPDATE 2 UPDATE affair_list 3 SET deleteState = 0 4 WHERE gid IN ( 5 SELECT tt.gid 6 FROM ( 7 SELECT a.gid 8 FROM affair_list a 9 INNER JOIN ( 10 SELECT basicCode, im
指尖改变世界
2019/07/01
9580
关于sql中update语句响应条数为0的情况
导读:平时我们在做开发的时候,经常使用update去更新一条或多条数据。但是忽略了update语句的一条重要规则。 Update语句响应条数为0的情况只有两种: 1.没有更新到该数据。 例如:update table_1 set col_1 = ‘zhai’ where id = ‘fengxi’ table_1表中没有 id = ‘fengxi’ 这条数据,故响应条数为0。 2.更新的数据和原数据一样。 例如:(同上sql)update table_1 set col_1 = ‘zhai
翟凤玺
2020/10/29
1.4K0
MySQL|update字段为相同的值是否会记录binlog
前几天一个开发同事咨询我,update 更新字段为相同的值是否会记录binlog,我回复说不会。
用户1278550
2020/10/10
6.6K0
MySQL|update字段为相同的值是否会记录binlog
SQL使用(一):如何使用SQL语句去查询第二高的值
初看了一眼题时,脑子还有一点迷糊,对于数值最大的和最小的,可以使用max和min去查询出来,但对于第N的就不好找了,思考了一会儿了,心里大致有二个思路:
王豆豆
2020/07/24
5.8K0
SQL使用(一):如何使用SQL语句去查询第二高的值
如何实现update select 语句
有些时候我们会遇到如下情况,我们需要依赖一张表的查询结果来更新另一张表,比如我们存在一张主表和一张关联表,我们需要把关联表的部分字段数据同步到主表的里面。
阿东
2021/08/16
5.4K0
如何实现update select 语句
Oracle数据库sql语句空字段筛选方法,sql语句值为空判断方法
空字段筛选过程演示: select image_src, pk_group from sm_appmenuitem where image_src is null;
小蓝枣
2021/12/01
3.1K0
Oracle数据库sql语句空字段筛选方法,sql语句值为空判断方法
sql语句update中多个case/when的写法
又如: update xxxx_xxxx set xxx_type= CASE WHEN xxx_type = '0' THEN 'YXLX-0' WHEN xxx_type= '1' THEN 'YXLX-1' WHEN xxx_type= '2' THEN 'YXLX-2' END where YYY_type='1'
微风-- 轻许--
2022/04/13
3.4K0
sql语句update中多个case/when的写法
[GO] gin 框架gorm下使用logrus记录sql语句
使用gin gorm时 , 默认sql语句是打印在终端的 ,想要记录到文件中 , 可以使用logrus来记录到文件
唯一Chat
2020/10/28
3.7K0
[GO] gin 框架gorm下使用logrus记录sql语句
Mysql常用sql语句(23)- update 修改数据
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
1.2K0
Mysql常用sql语句(23)- update 修改数据
【SQL实用技巧】update,inner join与select语句的联合使用
在实际操作数据库的时候,经常使用将update和select结合使用,例如使用select统计数据,然后update到对应的表,按照常规的实现方式,先select出来对应的数据,然后再执行update语句。 偶尔这样实现没问题,但是经常这么写就显得罗嗦了,其实有更好的方式。 先建两个测试表table1和table2,两个表的数据很简单,其记录条数分别为2和4,具体如下:
明月AI
2022/01/07
4.8K0
【SQL实用技巧】update,inner join与select语句的联合使用
使用SQL语句如何实现条件判断
客户需求是咨询如何用SQL结合decode函数实现条件判断,比如当某一列数值大于500,对应类型“大于500”;当某一列数值小于500,对应类型“小于500”。 实际decode函数无法实现这个功能,实现要用到case when,为此我构造一个简单的示例来直观演示:
Alfred Zhao
2019/05/24
2.4K0
如何清空windows update历史更新记录
背景:如何清理windows update历史更新记录里某一条记录,比如安装了几十个补丁,有个失败,重新安装成功了,留着那一个失败的记录看着特别难受,就想删掉它,如何操作?
Windows技术交流
2023/06/20
2.6K0
springboot+Mybatis+MySql 一个update标签中执行多条update sql语句
但是不代表并不能实现,只需要在jdbc的url链接库地址上添加`&allowMultiQueries=true`即可
tongyao
2022/06/09
2.2K0
如何使用SQL语句创建触发器
触发器 是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。存储过程可以通过语句直接调用,而 触发器主要是通过事件进行触发而被执行的. 例如当对某一表进行诸如UPDATE(修改)、INSERT(插入)、DELETE(删除)这些操作时,SQL Server 就会自动执行触发器所定义的SQL语句,从而确保对数据之间的相互关系,实时更新.
初阶牛
2023/10/14
4120
如何使用SQL语句创建触发器
Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?
JSqlParser是一个用Java编写的SQL解析器,可以将SQL语句解析为Java对象,从而使开发人员能够轻松地分析、修改和重构SQL查询。
程序猿川子
2023/03/10
4.2K0
性能测试中标记每个请求
在做性能测试过程中,遇到一个棘手的问题,开发让我们复现几个请求时间较长的请求,他们看日志进行链路追踪,查找瓶颈所在。
FunTester
2020/01/17
4170
php如何判断SQL语句的查询结果是否为空?
PHP与mysql这对黄金搭档配合的相当默契,但偶尔也会遇到一些小需求不知道该怎么做,例如今天要谈到的:如何判断sql语句查询的结果集是否为空!
Yiiven
2022/12/15
3.7K0
EasyCVR如何使用SQL语句批量开启通道音频?
EasyCVR视频融合云平台可支持多协议、多类型的设备接入,包括国标GB28181、RTSP/Onvif、RTMP协议,以及海康/大华SDK、海康Ehome等,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台支持海量视频汇聚管理,可以提供视频监控直播、录像、云存储、检索与回看、智能告警、语音对讲、服务器集群、平台级联、数据共享等能力。
TSINGSEE青犀视频
2022/10/18
7410
[Golang]gorm更新数据update 解决值为0时被忽略
当update一个值是0的时候被忽略了 不能使用结构体 要使用map数据类型 例如要改成这样 values := map[string]uint{ "Status": status, } DB.Model(&User{}).Where(query, args...).Update(values)
唯一Chat
2022/02/22
2K0

相似问题

SQL update语句为表记录的每个不同子集填充数值序列

31

SQL update语句不更改记录

11

如何编写update SQL语句以更新多条记录

23

MS SQL update语句使用逗号分隔值

216

原始SQL update语句,而date值设置为NULL

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档