sql-server - 使用 group by 将序列号添加到现有表的每列
问题描述
我有以下数据:
ID Code value
580 SSSACCT 111
580 SSSACCT 112
580 TIX 10
580 TIX 30
35 SSSACCT 345
35 SSSACCT 344
35 SSSACCT 433
35 SSSACCT 221
我想通过将“SSSACCT”替换为“SSSAC”并将序列号添加到每个 ID 的末尾以及代码“TIX”的相同内容来更新如下数据:
ID Code Value
580 SSSAC1 111
580 SSSAC2 112
580 TIX1 10
580 TIX2 30
35 SSSAC1 345
35 SSSAC2 344
35 SSSAC3 433
35 SSSAC4 221
到目前为止,我尝试使用 T-SQL(变量)将数字添加到末尾(不确定这是否正确),但我不确定如何根据 ID 对其进行分组。任何帮助,将不胜感激。
到目前为止我写的代码:
DECLARE @myVar int
SET @myVar = 0
UPDATE
table
SET
@myvar = ID = @myVar + 1
Group by ID,Code --I know we cannot use group by in update but we may able to use in sub query
解决方案
您可以按照 Mitch Wheat 的建议使用 row_number 来计算值
这是一些分解它的示例代码
然后,您可以使用结果来更新您的原始表
;with mycte as (
select
580 as ID , 'SSSACCT' as code, 111 as value
union all select
580, 'SSSACCT', 112
union all select
580 , 'TIX', 10
union all select
580 , 'TIX' , 30
union all select
35 , 'SSSACCT', 345
union all select
35 , 'SSSACCT', 344
union all select
35 , 'SSSACCT' , 433
union all select
35 , 'SSSACCT', 221
)
, mycte2 as (
Select mycte.* , ROW_NUMBER() over(partition by code, ID order by ID) as row_num
from mycte
)
Select
mycte2.*
, concat(replace(code,'CT',''),row_num) as new_code
from mycte2
推荐阅读
- tensorflow - CUDA的张量流导入错误
- c# - 使用 vs 代码运行文件时遇到问题
- css - DIV 图像调整大小的噩梦 - 无法修复
- reactjs - 酶“mount”不渲染“Route”元素
- oracle - 将 Oracle CLOB 字段设置为 null 失败并出现 ORA 22275
- javascript - 如何使用 JSDoc 在 Typescript 中记录 JS 类
- javascript - img.style.width 与 JS 中的 img.width 不一样
- c -
注意:指针指向这里 - c# - Xamarin.forms android Prism 手柄硬件后退按钮
- ruby-on-rails - rails, bootstrap, media-breakpoint-only