我正在寻找一种方法,按照以下标准从产品表中选择4个供应商的前3行:
我尝试过这样的事情:
select top 12 * product, vendor
from products
order by productrating
但是很明显,这并不能为每个供应商提供3种产品。
产品表格包含:
productid (int), productname (nvarchar(500)), productrating (float),
vendor (id), price (float).
这些是相关专栏。
答案 0 :(得分:2)
您可以使用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;
答案 1 :(得分:0)
这将为您提供每个供应商的前3个产品。您没有说明您如何选择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
答案 2 :(得分:0)
如果您有要查询的固定供应商列表,可以使用以下方法:
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
如果你有供应商名称来选择它们按名称过滤掉,但是保持加入coindition以及它的ID,你需要寻找一种解决方法。