gpt4 book ai didi

sql - 简单SQL:如何计算集合中重复项的唯一且连续的数字?

转载 作者:行者123 更新时间:2023-12-04 18:20:25 26 4
gpt4 key购买 nike

假设我创建一个具有int Page,int Section和int ID标识字段的表,其中每个页面的page字段范围是1到8,section字段的范围是1到30。现在,假设两个记录具有重复的页面和部分。我如何重新编号这两个记录,以便页和节的编号顺序是连续的?

select page, section
from #fun
group by page, section having count(*) > 1


显示重复项:

page 1 section 3
page 2 section 3


缺少第1页第4部分和第2页第4部分。有没有一种方法可以不使用游标来查找和重新编号不支持Row_Number()的SQL 2000中的位置?

当然,下面的该rownum产生的数字与本节中的数字完全相同:

select page, section,
(select count(*) + 1
from #fun b
where b.page = a.page and b.section < a.section) as rownum
from #fun a


我可以创建一个值从1到100的数据透视表,但是要加入什么呢?

我想做的是这样的:

update p set section = (expression that gets 4)
from #fun p
where (expression that identifies duplicate sections by page)

最佳答案

我没有2000服务器可以对此进行测试,但是我认为它应该可以工作。

创建测试表/数据:

CREATE TABLE #fun
(Id INT IDENTITY(100,1)
,page INT NOT NULL
,section INT NOT NULL
)


INSERT #fun (page, section)
SELECT 1,1
UNION ALL SELECT 1,3 UNION ALL SELECT 1,2
UNION ALL SELECT 1,3 UNION ALL SELECT 1,5
UNION ALL SELECT 2,1 UNION ALL SELECT 2,2
UNION ALL SELECT 2,3 UNION ALL SELECT 2,5
UNION ALL SELECT 2,3


现在处理:

-- create a worktable
CREATE TABLE #fun2
(Id INT IDENTITY(1,1)
,funId INT
,page INT NOT NULL
,section INT NOT NULL
)

-- insert data into the second temp table ordered by the relevant columns
-- the identity column will form the basis of the revised section number
INSERT #fun2 (funId, page, section)
SELECT Id,page,section
FROM #fun
ORDER BY page,section,Id

-- write the calculated section value back where it is different
UPDATE p
SET section = y.calc_section
FROM #fun AS p
JOIN
(
SELECT f2.funId, f2.id - x.adjust calc_section
FROM #fun2 AS f2
JOIN (
-- this subquery is used to calculate an offset like
-- PARTITION BY in a 2005+ ROWNUMBER function
SELECT MIN(Id) - 1 adjust, page
FROM #fun2
GROUP BY page
) AS x
ON f2.page = x.page
) AS y
ON p.Id = y.funId
WHERE p.section <> y.calc_section


SELECT * FROM #fun order by page, section

关于sql - 简单SQL:如何计算集合中重复项的唯一且连续的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com