![](/img/trans.png)
[英]SQL Select rows where all rows from linked table have the same value in column x
[英]SQL select x number of rows from table based on column value
我正在寻找一种根据以下条件从产品表中选择4家供应商的前3行的方法:
我尝试做类似的事情:
select top 12 * product, vendor
from products
order by productrating
但是很明显,对于每个供应商来说,这都给我3种产品。
产品表具有:
productid (int), productname (nvarchar(500)), productrating (float),
vendor (id), price (float).
这些是相关的列。
您可以使用ANSI标准row_number()
函数为每个供应商获取3种产品:
select p.*
from (select p.*,
row_number() over (partition by vendor order by rating desc) as seqnum
from products p
) p
where p.seqnum <= 3
如果要4个供应商:
select top 12 p.*
from (select p.*,
row_number() over (partition by vendor order by rating desc) as seqnum
from products p
) p
where p.seqnum <= 3
order by vendor;
这将为您提供每个供应商排名前三的产品。 您没有指定如何选择4个供应商。 可以使用WHERE子句或使用不同的ORDER BY轻松包含该逻辑,具体取决于您选择4个供应商的方式。
SELECT TOP 12 vnd.Vendor, apl.ProductName
FROM Vendors vnd
CROSS APPLY (
SELECT TOP 3 ProductID
FROM Products prd
WHERE vnd.ProductID = prd.ProductID
ORDER BY prd.ProductRating DESC
) apl
ORDER BY vnd.VendorName
如果您有固定的供应商列表,则要查询,可以使用以下方法:
SELECT TOP 3
p.ProductID
FROM Products p
WHERE p.ProductID IN ( SELECT v.ProductID
FROM Vendors v
WHERE v.VendorID IN (Vendor1ID, Vendor2ID, Vendor3ID, Vendor4ID)
ORDER BY p.ProductRating DESC
如果您有供应商名称来选择它们,请按其名称进行筛选,但保留其通过其ID保留加入条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.