如何获得每组最少 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;
我在 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;