繁体   English   中英

SQL根据列值从表中选择x行数

[英]SQL select x number of rows from table based on column value

我正在寻找一种根据以下条件从产品表中选择4家供应商的前3行的方法:

  1. 必须选择4个供应商。
  2. 必须按产品等级为每个供应商选择前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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM