加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – Access select语句中的Row_Number()

发布时间:2020-12-12 16:19:54 所属栏目:MsSql教程 来源:网络整理
导读:我相信已经提出了类似的问题,但我找不到适合我的解决方案. 我有一个数据库,我用它来分类数字化的书籍和他们的页面,我试图排序几千页包含地图.在我使用的第一个列表的两个表中列出了书中的所有页面以及它们在书中出现的顺序,它有三列(bookID,pageOrder,pageID)
我相信已经提出了类似的问题,但我找不到适合我的解决方案.

我有一个数据库,我用它来分类数字化的书籍和他们的页面,我试图排序几千页包含地图.在我使用的第一个列表的两个表中列出了书中的所有页面以及它们在书中出现的顺序,它有三列(bookID,pageOrder,pageID),每个页面都有自己的行.第二个表列出了每个页面上出现的所有位置(在地图中),如果一个页面上有多个位置,则会有两列(pageID,placeID),然后为每个位置添加一个新行.

我需要做的是创建一个select语句,为每个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,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.placeID
FROM booksAndPages AS bp INNER JOIN
     pagesAndPlaces AS pp
     ON bp.pageID = pp.pageID;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读