Как суммировать топ 1 записи из разных групп предметов одной таблицы? - PullRequest
0 голосов
/ 07 июля 2019

Я хочу, чтобы сумма итога различных групп top1 результата.

Select PCCI.BWPrintQty 
from PrintCusClickRecord PCCI 
where Convert(Date, pcci.ClickMonth) < Convert(Date, '2019-01-01') 
  and PCCI.OrderID != 129012 and ISNULL(PCCI.IsDelete, 0) != 1 
  and PCCI.ItemTrackingNo in ('C397P800803', 'G145P901553', 'G146P300748') 
order by PCCI.ClickMonth desc

Вот данные для

Click record for C397P800803        
-------------------------------
300,
200,
100

Click record for G145P901553
-------------------------------
400,
250,
150

Click record for G146P300748
-------------------------------
500,
450,
350

Выходные данные должны быть суммой всех первых записей из той жеТаблица приведена выше.означает = 300 + 400 + 500 = 1200 (результат)

Ответы [ 3 ]

0 голосов
/ 07 июля 2019

Вы можете использовать функцию Rank.

SELECT SUM(PrintQty) FROM (
Select PCCI.BWPrintQty AS PrintQty, RANK() OVER (
    PARTITION BY PCCI.ItemTrackingNo
    ORDER BY PCCI.ClickMonth desc
) as [Rank]
from PrintCusClickRecord PCCI 
where  Convert(Date,pcci.ClickMonth) < Convert(Date,'2019-01-01') 
and PCCI.OrderID!= 129012 and ISNULL(PCCI.IsDelete,0)!=1 
and PCCI.ItemTrackingNo in('C397P800803'
                           'G145P901553'
                           ,'G146P300748'
                           ) 
) S
WHERE S.[Rank] = 1

Запрос выдает значение, например:

Click record for C397P800803        
-------------------------------
300, 1
200, 2
100, 3

Click record for G145P901553
-------------------------------
400, 1
250, 2
150, 3

Click record for G146P300748
-------------------------------
500, 1
450, 2
350, 3

Затем он фильтрует записи с рангом, равным 1 => 300, 400, 500, и вычисляет их сумму.

0 голосов
/ 07 июля 2019

Row_number их по мере необходимости и возьмите первые.

select sum(BWPrintQty) 
from (
    select PCCI.BWPrintQty 
       -- order by PCCI.ClickMonth if you need first month
      , row_number() over(partition by PCCI.ItemTrackingNo order by PCCI.BWPrintQty desc) pos 
    from PrintCusClickRecord PCCI 
    where  Convert(Date,pcci.ClickMonth) < Convert(Date,'2019-01-01') 
       and PCCI.OrderID!= 129012 and ISNULL(PCCI.IsDelete,0)!=1 
       and PCCI.ItemTrackingNo in('C397P800803'
                                ,'G145P901553'
                                ,'G146P300748'
                               ) 
   ) t
where pos = 1;
0 голосов
/ 07 июля 2019

Я предлагаю сгруппировать ItemTrackingNo по их максимальному BWPrintQty (я предполагаю, что это столбец для чисел в вашем примере, примените фильтр, который вы упомянули выше в вашем вопросе, и подведите итог.

(select sum(first) from 
  (select 
    max(BWPrintQty) as first, 
    ItemTrackingNo
  from PrintCusClickRecord 
  where 
  Convert(Date,pcci.ClickMonth) < Convert(Date,'2019-01-01') 
  and PCCI.OrderID!= 129012 
  and ISNULL(PCCI.IsDelete,0)!=1 
  and PCCI.ItemTrackingNo in('C397P800803', 'G145P901553' ,'G146P300748') 
  group by ItemTrackingNo)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...