Одна из возможностей - это, хотя я действительно не вижу экономического обоснования. Я думаю, это просто технический вопрос:
SELECT
T.SalesRep, T.Customer, T.Product,
CASE WHEN EXISTS (SELECT 1 FROM MyTable AS T1
WHERE T1.SalesRep = T.SalesRep
AND T1.Customer = T.Customer
AND T1.Product < T.Product)
THEN 0
ELSE SUM(T.Quantity) OVER (PARTITION BY T.SalesRep, T.Customer)
END AS Quantity,
CASE WHEN EXISTS (SELECT 1 FROM MyTable AS T1
WHERE T1.SalesRep = T.SalesRep
AND T1.Customer = T.Customer
AND T1.Product < T.Product)
THEN 0
ELSE SUM(T.Total) OVER (PARTITION BY T.SalesRep, T.Customer)
END AS Total
FROM MyTable AS T
Для двух предложений CASE
они гласят: «когда есть запись для одного и того же торгового представителя и клиента с меньшим продуктом (это мое предположение?), Затем обнулить значение. В противном случае суммировать все значения сгруппированы по торговому представителю и клиенту. Это также будет работать с более чем двумя (разными!) продуктами на торгового представителя и клиента.
Примечание : если в одной торговой точке может быть несколько идентичных продуктов. и клиент, это не сработает, и вам придется сравнить некоторые другие значения (например, T1.ID < T.ID
) в двух вложенных выборках
Обратите также внимание : это может быть неправильно, так как я должен был сделать некоторые предположения относительно ваших требований.