花生了什么树210 2024-06-17 15:07 采纳率: 100%
浏览 2
已结题

数据库视图题:查询降序问题

题目要求:

img


我第一次写的:

img


我第二次改的:(加了个TOP(100))

img


但是最后结果还是升序!

img

  • 写回答

3条回答 默认 最新

  • 专家-皆知 2024-06-17 15:07
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    针对你所描述的问题,创建一个视图以展示每位读者的借书证号、姓名以及他们借阅图书的数量,并且要求这个结果集按照借书证号降序排列。然而,SQL Server 视图中的 ORDER BY 子句是无效的,除非与 TOP, OFFSET, 或 FOR XML 结合使用。你已经尝试了添加 TOP(100) PERCENT,但这似乎没有解决你的排序问题。

    解决这个问题的关键在于,虽然你可以在视图定义中包括 ORDER BYTOP,但这样做并不会影响视图本身的数据存储方式。视图不会存储数据,它只是一个查询的封装,因此,当从视图中选择数据时,你仍然需要在最终的查询中使用 ORDER BY 来获取期望的排序结果。

    以下是修改后的视图定义,它将保留你当前的逻辑,但在最终使用视图时,你需要额外的 SELECT 查询来应用 ORDER BY

    CREATE VIEW num_borrow AS
    SELECT 
        Borrowing.借书证号,
        Readers.姓名,
        COUNT(Borrowing.借书证号) AS '借阅图书的数量'
    FROM 
        Readers
    INNER JOIN 
        Borrowing ON Readers.借书证号 = Borrowing.借书证号
    GROUP BY 
        Borrowing.借书证号,
        Readers.姓名;
    

    然后,在使用视图时,执行下面的查询:

    SELECT 
        *
    FROM 
        num_borrow
    ORDER BY 
        借书证号 DESC;
    

    这将确保结果按借书证号降序排列。注意,这里使用了 INNER JOIN 而不是逗号连接,这通常提供更清晰的语义并且在某些情况下可能提供更好的性能。

    如果你需要在视图定义中包含排序行为(例如,为了简化最终用户或应用程序的查询),可以考虑创建一个带有 TOP 的视图,并在应用程序或最终用户的查询中使用 OFFSETFETCH 子句来实现分页和排序。然而,这通常不推荐作为常规实践,因为视图的目的主要是为了封装复杂性而不是存储排序的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 6月17日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?