【9.0.103】请教一个sql语句的问题 循环更新某个字段的问题
原来这个序号是无关紧要的,就允许为空了。现在要拿这个序号做为排序的字段,就不不能为空。
但数据库表中,原来的这些数据,是空的。
需要按照模板ID,空间ID为一个单位,按照detais_ID从小到大,把序号从1开始填。
这种sql语句怎么写,各位大佬~
本帖最后由 管家婆软件 于 2024-8-6 15:55 编辑
-- 创建临时表来存储序号为空的记录及其新的序号
CREATE TABLE #TempTable (
模板ID INT,
空间ID INT,
DetailID INT,
序号 INT,
new_序号 INT
);
-- 向临时表中插入数据,生成新的序号
INSERT INTO #TempTable (模板ID, 空间ID, DetailID, 序号, new_序号)
SELECT
模板ID,
空间ID,
DetailID,
序号,
ROW_NUMBER() OVER (PARTITION BY 模板ID, 空间ID ORDER BY DetailID) AS new_序号
FROM
TableDetail
WHERE
序号 IS NULL;
-- 使用临时表中的新序号更新原始表
UPDATE td
SET td.序号 = t.new_序号
FROM
TableDetail td
JOIN
#TempTable t ON td.模板ID = t.模板ID
AND td.空间ID = t.空间ID
AND td.DetailID = t.DetailID
AND td.序号 IS NULL;
-- 删除临时表
DROP TABLE #TempTable;
这个脚本的步骤如下:
[*]创建一个临时表 #TempTable,用于存储 序号 为空的记录及其新的 序号。
[*]使用 INSERT INTO 语句将 序号 为空的记录插入到临时表中,并通过 ROW_NUMBER() 函数生成新的 序号,其中 ROW_NUMBER() 函数使用 PARTITION BY 模板ID, 空间ID 来分组,并根据 DetailID 进行排序。
[*]使用临时表中的新 序号 更新 TableDetail 表中的记录。
[*]删除临时表 #TempTable 以清理临时数据。
这种方法确保了每个 模板ID 和 空间ID 组合内的记录按照 DetailID 从小到大排序,并且序号从 1 开始递增。
本帖最后由 毛毛 于 2024-8-6 08:09 编辑
1、按detais_ID排序增加一个分组序号列,创建一个临时表,然后基于临时表更新这张表,用模板ID、空间ID、detais_ID作为关联字段
UPDATE
待更新表
SET
待更新表.待更新字段 = 源数据表.源数据字段
FROM
待更新表 INNER JOIN 源数据表 ON 待更新表.关联字段 = 源数据表.关联字段
2、使用游标
如果表的记录数非常多的话建议使用第一种方法
大佬,和您确认一下,这里分组后是组内序号从1开始呢:nbtz5:
还是序号全部都从1开始排序呢
Lay.Li 发表于 2024-8-6 10:15
大佬,和您确认一下,这里分组后是组内序号从1开始呢
还是序号全部都从1开始排序呢
分组后是组内序号从1开始 WITH temptable AS (
SELECT
[模板id],
[空间id],
[整数],
ROW_NUMBER() OVER (PARTITION BY [模板id], [空间id] ORDER BY ASC) AS NewRowNum
FROM
[数据表1]
)
UPDATE yt
SET yt.序号= rd.NewRowNum
FROM
[数据表1] yt
INNER JOIN temptable rd ON yt.[模板id] = rd.[模板id] AND yt.[空间id] = rd.[空间id] AND yt. = rd.
您好,sql我们也不是很擅长,在网上搜了一下,您可以试试上方的sql语句
毛毛 发表于 2024-8-6 08:04
1、按detais_ID排序增加一个分组序号列,创建一个临时表,然后基于临时表更新这张表,用模板ID、空间ID、de ...
我卡在 这个分组序列号 怎么来?不还是回头最早了吗?:'( 感谢各位大佬的支持~
这里分组序列号,是用ROW_NUMBER()函数获取的,我这边儿使用上方的sql语句测试是可以的。您哪儿边使用上面的sql语句不可以么:'(
另外林总,有个事情问一下您。葡萄城为我们的伙伴专门打造了一个新系统,生态伙伴中心。
这个系统让我们可以随时查看订单、授权情况以及合作协议。此外,还可以了解企业成员的认证考试通过情况、培训情况,以及参与论坛的信息,手机和PC都可以访问!
为了保护一些可能涉及的敏感信息,系统将绑定一个超级管理员账号,就是论坛账号。想问下咱公司应该由哪个论坛账号来管理这些信息呢?
Lay.Li 发表于 2024-8-6 16:56
感谢各位大佬的支持~
这里分组序列号,是用ROW_NUMBER()函数获取的,我这边儿使用上方的sql语句测试是可以 ...
就用这个账号~还有喊我小鱼 就好了~在你们面前 我是学生:lol 您谦虚了,以后有关实际业务场景上的一些问题,可能还需要您的帮助呢:lol
这边儿把伙伴系统的体验地址私发给您哈:i0tw2:
页:
[1]
2