TDa*_*obz 3 sql sql-server sql-server-2008
我使用下面的查询来搜索标题中包含术语的产品.查询返回所需的结果(通常结果太多).
现在我只希望它能够为每家公司选择最多3个(随机)产品.一些公司返回了许多记录/产品,但我只需要拿3个并继续下一个公司
SELECT p.title As entryname, cname
FROM company c, product p
WHERE p.title LIKE '%steel%' AND p.cid = c.cid
GROUP By cname, ca.title
Run Code Online (Sandbox Code Playgroud)
我试图理解分区和排名的东西,但我没有走得太远.我正在使用ms sql
您可以使用ROW_NUMBER()来执行此操作
with cte as (
SELECT
p.title as entryname, cname,
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY p.id) rn
FROM company c
INNER JOIN product p
ON p.cid = c.cid
WHERE p.title LIKE '%steel%'
GROUP By cname, ca.title
)
SELECT
p.title as entryname, cname,
FROM CTE where rn <= 3
Run Code Online (Sandbox Code Playgroud)
如果您真的想要随机(而不是具有最低ID的3),您可以将row_number行更改为
ROW_NUMBER() OVER (PARTITION BY c.id order by newid()) rn