SQL Server - 为每个FK选择TOP 5行

db1*_*234 5 sql-server greatest-n-per-group

我有以下查询,查找与搜索匹配的TOP 5 产品.每个产品都与商店相关联

SELECT TOP 5*FROM Products p,Shops s WHERE p.ShopId = s.ShopId AND p.ProductName LIKE'%christmas%'

我需要对此进行扩展,以便在每个商店中返回TOP 5 产品.

任何人都可以让我知道如何修改查询来实现这一目标吗?- 即选择在每个商店中匹配"%christmas%"的TOP 5产品(而不是显示所有商店中匹配"%chrismas%"的TOP 5产品的当前产品).

gbn*_*gbn 10

你实际上错过了ORDER BY以使TOP有意义,或者任何基于ROW_NUMBER的解决方案需要ORDER BY.

SELECT
    *
FROM
    Shops s 
CROSS APPLY (
    SELECT TOP 5
        *
    FROM
        Products p
    WHERE
        p.ShopId = s.ShopId AND p.ProductName LIKE '%christmas%'
    ORDER BY --added on edit
        ???
) X
Run Code Online (Sandbox Code Playgroud)

  • 请记住,您需要为前5的查询添加别名才能使其正常工作.例如交叉申请(选择前5 ...)AS p (2认同)