SQL Server如何依据TFC表记录复制Request表行并补全Sketch_rev字段
实现查询
你可以直接使用以下SQL Server查询得到完全匹配需求的结果:
WITH DistinctTFC AS ( -- 先对TFC表去重,过滤重复的草图版本记录 SELECT DISTINCT Request_no, Request_ver_no, [Sketch_no+rev] FROM TFC ) SELECT r.Request_no, r.Request_ver_no, r.Sketch_no, -- 提取末尾版本号:去掉前缀Sketch_no,剩余字符就是版本字母 Sketch_rev = REPLACE(t.[Sketch_no+rev], r.Sketch_no, ''), -- 按请求主键分组生成递增Index,按草图版本排序保证顺序正确 [Index] = ROW_NUMBER() OVER ( PARTITION BY r.Request_no, r.Request_ver_no ORDER BY t.[Sketch_no+rev] ) FROM Request r INNER JOIN DistinctTFC t ON r.Request_no = t.Request_no AND r.Request_ver_no = t.Request_ver_no ORDER BY r.Request_no, r.Request_ver_no, [Index]
逻辑说明
- 用CTE
DistinctTFC提前对TFC表去重,避免因TFC_no重复生成多余的Request行 - 通过
Request_no+Request_ver_no关联两张表,匹配同一个请求版本对应的所有草图版本 - 用
REPLACE去掉Sketch_no+rev的前缀部分,无后缀的原始版本会自动返回空值,刚好匹配需求 - 窗口函数
ROW_NUMBER按请求主键分区、按草图版本排序生成的Index,完全符合你要求的编号规则 - 如果你数据里存在
Sketch_no内容出现在Sketch_no+rev后半段的特殊情况,可以把Sketch_rev的提取逻辑替换为更严谨的STUFF(t.[Sketch_no+rev], 1, LEN(r.Sketch_no), ''),效果一致。
内容的提问来源于stack exchange,提问作者Kristian T
相关产品推荐
相关产品推荐

