首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2012 -使用twist更新

Server 2012 -使用twist更新
EN

Stack Overflow用户
提问于 2019-12-18 14:23:03
回答 1查看 48关注 0票数 1

基于我无法控制的数据,我能够根据数据中提供的姓氏确定三行数据集。

代码语言:javascript
复制
BEG    END

AAA    GYS
HA     OUN
OUR    ZZZ

如您所见,第二行集以HA ( BEG列)开头。我想要的是更新第二行集乞求列值从HAGYT,这是第1行集的END值加上下一个3α字符组合组。在同样的情况下,我想更新第3行集BEG列值从OUROUO,这是第2行集的END值加上下一行的3 alpha字符组合。

现在,这只是一个例子,我只能拥有2到10个起始行集,但是脚本必须足够智能来处理所有情况。

我创建了一个包含所有3个alpha组合的表,AAA - ZZZ,总共17,576行,认为我可以使用这个表来确定要更新什么,但我在逻辑上不知道如何制作一个智能脚本来处理所有可能的修改。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 15:16:26

考虑到您已经拥有了aaa-zzz表,并且假定所有end值都存在于信函表中,-一种解决方案可能是使用可更新的cte。

安装程序:创建并填充信函表(部分地,只有演示所需的字母)

代码语言:javascript
复制
DECLARE @Letters As TABLE
(
    Alpha char(3)
)

INSERT INTO @Letters (Alpha) VALUES
('AAA'), ('AAB'), ('AAC'), /*...*/ ('AAZ'), ('ABA'), ('ABB') -- ....
('GYS'), ('GYT'), -- ....
('OUN'), ('OUO'), -- ....
('RSZ'), ('RTA') -- ....

创建并填充示例表(--请在今后的问题中保存此步骤):

代码语言:javascript
复制
DECLARE @T AS TABLE
(
    Beg char(3),
    [End] char(3)
);

INSERT INTO @T (Beg, [End]) VALUES
('AAA', 'GYS'),
('HA', 'OUN'),
('ST', 'ZZZ');

反恐执行委员会:

代码语言:javascript
复制
WITH CTE AS
(
    SELECT Beg, [End], LAG([End]) OVER(ORDER BY Beg) As LastEnd
    FROM @T
)

更新声明:

代码语言:javascript
复制
UPDATE CTE
SET Beg = (SELECT TOP 1 Alpha FROM @Letters WHERE Alpha > LastEnd ORDER BY Alpha)
FROM CTE 
WHERE LastEnd IS NOT NULL
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59394081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档