Как получить минимум 3 записи на группу? - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть 3 столбца в таблице SalesCart следующим образом:

enter image description here

Мне нужно получить минимум 3 записи для каждого элемента следующим образом:

enter image description here

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

Я думаю, что мы можем просто использовать 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

Пожалуйста, примите это как ответ, если он работает для вас. Спасибо.

1 голос
/ 23 февраля 2020

Вы также можете попробовать это, и вы можете увеличивать или уменьшать число в зависимости от ваших требований динамически.

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;
...