gpt4 book ai didi

sql - Access 选择语句中的 Row_Number()

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

我相信有人问过类似的问题,但我找不到适合我的解决方案。

我有一个数据库,用于对数字化书籍及其页面进行分类,我正在尝试对包含 map 的数千页进行分类。在我使用的两个表中,第一个列出了书中的所有页面以及它们在书中出现的顺序,它有三列(bookID、pageOrder、pageID),每个页面都有自己的行。第二个表列出了每个页面上出现的所有地点(在 map 中),它有两列(pageID、placeID),如果一页上有多个地点,则为每个地点向表中添加一个新行。

我需要做的是创建一个选择语句,为每个 pageID/placeID 组合提供一个唯一的数字,但数字必须按照它们在书中出现的顺序排列。在 SQL Server 中,我会这样做:

SELECT ROW_NUMBER() OVER(ORDER BY bp.bookID, bp.pageOrder, pp.placeID) AS uniqueNumber, pp.pageID, pp.placeID
FROM booksAndPages AS bp INNER JOIN pagesAndPlaces AS pp ON bp.pageID = pp.pageID

不幸的是,我一直在使用 Access。理想情况下,我想使用单个 SQL 语句(如果可能)来执行此操作,类似于上面的语句,但我也会尝试使用 VBA。

任何帮助是极大的赞赏。

最佳答案

这是您想要的查询:

SELECT ROW_NUMBER() OVER (ORDER BY bp.bookID, bp.pageOrder, pp.placeID) AS uniqueNumber,
pp.pageID, pp.placeID
FROM booksAndPages AS bp INNER JOIN
pagesAndPlaces AS pp
ON bp.pageID = pp.pageID;

您可以使用相关子查询获得相同的结果。更复杂,更昂贵,但可能:
SELECT (select count(*)
from booksAndPages AS bp2 INNER JOIN
pagesAndPlaces AS pp2
ON bp2.pageID = pp2.pageID
where bp2.bookID < bp.bookID or
(bp2.bookID = bp.bookID and bp2.pageOrder < bp.pageOrder) or
(bp2.bookID = bp.bookID and bp2.pageOrder = bp.pageOrder and
bp2.placeId <= pp.PlaceId
)
) as uniqueNumber,
pp.pageID, pp.placeID
FROM booksAndPages AS bp INNER JOIN
pagesAndPlaces AS pp
ON bp.pageID = pp.pageID;

这假设组合 bookId , pageOrder , placeId` 是唯一的。

关于sql - Access 选择语句中的 Row_Number(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18753368/

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