基于我无法控制的数据,我能够根据数据中提供的姓氏确定三行数据集。
BEG END
AAA GYS
HA OUN
OUR ZZZ如您所见,第二行集以HA ( BEG列)开头。我想要的是更新第二行集乞求列值从HA到GYT,这是第1行集的END值加上下一个3α字符组合组。在同样的情况下,我想更新第3行集BEG列值从OUR到OUO,这是第2行集的END值加上下一行的3 alpha字符组合。
现在,这只是一个例子,我只能拥有2到10个起始行集,但是脚本必须足够智能来处理所有情况。
我创建了一个包含所有3个alpha组合的表,AAA - ZZZ,总共17,576行,认为我可以使用这个表来确定要更新什么,但我在逻辑上不知道如何制作一个智能脚本来处理所有可能的修改。
有什么想法吗?
发布于 2019-12-18 15:16:26
考虑到您已经拥有了aaa-zzz表,并且假定所有end值都存在于信函表中,-一种解决方案可能是使用可更新的cte。
安装程序:创建并填充信函表(部分地,只有演示所需的字母)
DECLARE @Letters As TABLE
(
Alpha char(3)
)
INSERT INTO @Letters (Alpha) VALUES
('AAA'), ('AAB'), ('AAC'), /*...*/ ('AAZ'), ('ABA'), ('ABB') -- ....
('GYS'), ('GYT'), -- ....
('OUN'), ('OUO'), -- ....
('RSZ'), ('RTA') -- ....创建并填充示例表(--请在今后的问题中保存此步骤):
DECLARE @T AS TABLE
(
Beg char(3),
[End] char(3)
);
INSERT INTO @T (Beg, [End]) VALUES
('AAA', 'GYS'),
('HA', 'OUN'),
('ST', 'ZZZ');反恐执行委员会:
WITH CTE AS
(
SELECT Beg, [End], LAG([End]) OVER(ORDER BY Beg) As LastEnd
FROM @T
)更新声明:
UPDATE CTE
SET Beg = (SELECT TOP 1 Alpha FROM @Letters WHERE Alpha > LastEnd ORDER BY Alpha)
FROM CTE
WHERE LastEnd IS NOT NULLhttps://stackoverflow.com/questions/59394081
复制相似问题