【问题标题】:SQL Server different select statement on same table and different resultSQL Server在同一张表上的不同选择语句和不同的结果
【发布时间】:2019-11-23 01:03:48
【问题描述】:

我有一个产品表,其中包含创建日期、价格、费率......和多个列我需要一个选择语句来返回 10 个最新记录、10 个最低价格和最高评价的产品作为彼此分离的结果,例如

(select top 10 from products Order By Date ASC ) as newest_list
(select top 10 from products Order By price DESC ) as price_list
(select top 10 from products Order By Rate ASC ) as rateList_list 

where ( latest_list price_list rateList_list) 是不同的表结果

有什么更好的方法来处理这个结果。谢谢。

【问题讨论】:

    标签: sql sql-server database web-applications


    【解决方案1】:

    你基本上想要 union all 。 . .和一个子查询:

    select *
    from ((select top 10 'newest' as which, p.*
           from products p
           Order By Date ASC
          ) union all
          (select top 10 'priciest', p.*
           from products p
           Order By price DESC
          ) union all
          (select top 10 'ratiest', p.*
           from products p
           Order By Rate ASC
          )
         ) p
    

    如果不想重复,可以使用union或窗口函数:

    select p.*
    from (select p.*,
                 row_number() over (order by date desc) as seqnum_d,
                 row_number() over (order by price desc) as seqnum_p,
                 row_number() over (order by rate asc) as seqnum_r
          from p
         ) p
    where seqnum_d <= 10 or seqnum_p <= 10 or seqnum_r <= 10;
    

    【讨论】:

    • 我能问你其他问题吗?我有两张表,一张用于产品,另一张用于类型,因此 99% 的时间产品都有一种类型作为外键,假设香蕉产品有 '例如 type' => 9 指的是水果,对于 0.01% 的数据需要 2 种类型,所以 type => '8,8' 我知道它不利于规范化,我真的不会为此创建第三个表实现这一目标的更好方法,感谢并度过美好的一天
    • @hassanJ 。 . .新问题应该以 questions 的形式提出,而不是 cmets
    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多