如何获得每组最少 3 条记录?

How to get minimum 3 records per a group?

我在 SalesCart table 中有 3 列,如下所示,

我需要为每个项目获取至少 3 条记录,如下所示,

怎么做?

我想我们可以简单地使用 Row_Number() -

 declare @testtable TABLE
(
    ItemCode NVARCHAR(30),
    Customer VARCHAR(10),
    Amount INT
)

INSERT INTO @testtable

VALUES 
('A-001','A', 25000)
,('A-001','B', 15000)
,('A-001','C', 12000)
,('A-001','D', 12500)
,('A-001','E', 20000)
,('A-002','C', 3000)
,('A-002','X', 2250)
,('A-002','Y', 3750)
,('A-002','D', 3100)

select *
from @testtable

select *
from 
(
select *, ROW_number() over (PARTITION BY ItemCode ORDER BY ItemCode ) as Number
from @testtable
) t
where t.Number < 4

你也可以试试这个,你可以根据你的需要动态增加或减少数量。

DECLARE @top INT;
SET @top = 3;

;WITH grp AS 
(
 SELECT ItemCode, Customer, Amount,
 rn = ROW_NUMBER() OVER
 (PARTITION BY ItemCode ORDER BY ItemCode DESC)
 FROM itemTable
)
  SELECT ItemCode, Customer, Amount
  FROM grp
  WHERE rn <= @top
  ORDER BY ItemCode  DESC;