ВЫБРАТЬ СТРОКУ на основе МАКС. Количества и СУММЫ, сгруппированных по полям - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь СУММАТЬ количество строк и группировать их по номеру детали и корзине, а затем выбрать корзину с максимальным количеством для начала. В приведенном ниже запросе это только выбор корзины 1-B. Мой набор результатов должен быть для Части 1-2345: Корзина 1-А, Сумма складских мест = 150, всего в этой корзине = 100

CREATE TABLE inventory (
ID int IDENTITY(1,1) PRIMARY KEY,
bin nvarchar(25),
partnumber nvarchar(25),
qty int
);

INSERT INTO inventory ( bin, partnumber, qty)
VALUES ('1-A', '1-2345', '100'), ('1-A', '1-2347', '10'), ('1-A', '1-2348', 
'15'), ('1-B', '1-2345', '50'), ('1-B', '1-2347', '50'), ('1-B', '1-2348', 
'55')

;With cte as
    ( SELECT bin, partnumber, sum(qty) qty
    , ROW_NUMBER() OVER( Partition By  partnumber ORDER BY bin desc) as rn 
from inventory
     GROUP BY bin, partnumber) 
SELECT * FROM cte where rn = 1 

Результирующий набор должен быть
Выход:

bin partnumber  sum_of_bins max_qty_in_bin  
1-A 1-2345      150         100             
1-B 1-2347      60          50              
1-B 1-2348      70          55  

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Поскольку вы не дали нам пример выходных данных, неясно, что вы пытаетесь сделать. Из вашего последнего предложения:

With cte as
( SELECT bin, partnumber, 
      sum(qty) over (Partition By  partnumber) as sumQty,
      sum(qty) over (Partition By  partnumber Order by bin) as totQty,
     ROW_NUMBER() OVER ( Partition By  partnumber ORDER BY bin) as rn 
from inventory
) 
SELECT * FROM cte where rn = 1; 

Вот DBFiddle Demo.

0 голосов
/ 14 ноября 2018

Дайте этому водовороту:

DECLARE @inventory TABLE (ID int IDENTITY(1,1), bin nvarchar(25), partnumber nvarchar(25), qty int);

INSERT INTO @inventory ( bin, partnumber, qty)
VALUES ('1-A', '1-2345', '100'), ('1-A', '1-2347', '10'), ('1-A', '1-2348','15'), ('1-B', '1-2345', '50'), ('1-B', '1-2347', '50'), ('1-B', '1-2348', '55')

;WITH CTE AS
    ( 
        SELECT bin, partnumber
                , sum(qty) OVER(Partition By partnumber) AS sum_of_bins
                , max(qty) OVER(Partition By partnumber) AS max_qty_in_bin
                , ROW_NUMBER() OVER(Partition By partnumber ORDER BY qty desc) as rn 
        FROM @inventory
        GROUP BY bin, partnumber, qty) 

SELECT * 
FROM cte
WHERE rn=1

Выход:

bin partnumber  sum_of_bins max_qty_in_bin  rn
1-A 1-2345      150         100             1
1-B 1-2347      60          50              1
1-B 1-2348      70          55              1
...