我正在尝试提出一种有用的方法,将文档第一页和最后一页之间的所有页面列出到新行中,同时将 ID 号保留为键或交叉引用。我有几种方法可以获取中间的页面,但我不太确定如何以编程方式维护 key 。
输入示例:
First Page Last Page ID
ABC_001 ABC_004 1
ABC_005 ABC_005 2
ABC_006 ABC_010 3
最终结果:
All Pages ID
ABC_001 1
ABC_002 1
ABC_003 1
ABC_004 1
ABC_005 2
ABC_006 3
ABC_007 3
ABC_008 3
ABC_009 3
ABC_010 3
非常感谢任何帮助。我正在使用 SQL mgmt studio。
最佳答案
一种方法是设置一个数字表,其中包含您可能在列内容中找到的数字列表:
CREATE TABLE numbers( idx INTEGER);
INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
...
INSERT INTO numbers VALUES(10);
现在,假设所有页面值都有 7 个字符,最后 3 位是数字,我们可以将原始表与 numbers
表JOIN
来生成缺失的记录:
SELECT
CONCAT(
SUBSTRING(t.First_Page, 1, 4),
REPLICATE('0', 3 - LEN(n.idx)),
n.idx
) AS [ALl Pages],
t.id
FROM
mytable t
INNER JOIN numbers n
ON n.idx >= CAST(SUBSTRING(t.First_Page, 5, 3) AS int)
AND n.idx <= CAST(SUBSTRING(t.Last_Page, 5, 3) AS int)
这个 demo on DB Fiddle 与您的示例数据返回:
ALl Pages | id :-------- | -: ABC_001 | 1 ABC_002 | 1 ABC_003 | 1 ABC_004 | 1 ABC_005 | 2 ABC_006 | 3 ABC_007 | 3 ABC_008 | 3 ABC_009 | 3 ABC_010 | 3
关于SQL - 列出记录之间的所有页面,同时维护 ID 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55153016/