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

问题描述 投票:0回答:2

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

enter image description here

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

enter image description here

该怎么做?

sql greatest-n-per-group
2个回答
1
投票

我想我们可以简单地使用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

如果适合您,请接受它作为答案。谢谢。


0
投票

您也可以尝试此操作,并且可以根据需要动态增加或减少数量。

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;
© www.soinside.com 2019 - 2024. All rights reserved.