Рассчитать объем продаж по продажам - PullRequest
1 голос
/ 15 марта 2019

У меня есть таблица в следующем формате.

Пример таблицы и данных

declare @sales table 
(productid int, TransDate date,SalesPerson varchar(100),Amount bigint)

insert into @sales
values
(1 ,         20150101,      50  ,         'S1'),
(1 ,         20150201,      50  ,         'S1'),
(1 ,         20150301,      50  ,         'S1'),
(1 ,         20150401,      50  ,         'S1'),
(1 ,         20150501,      50  ,         'S1'),
(1 ,         20150601,      50  ,         'S2'),
(1 ,         20150701,      50  ,         'S2'),

Теперь мне нужно вычислить итоговое значениепродажи каждого представителя и связанные продажи (продажи, выполненные всеми продавцами, кроме основного продавца)

Например, для менеджера по продажам S1 его продажи составляют 250 и продажи связанных агентов (S2) (которыетакже участвует в продажах, обслуживаемых S1 для продуктов 1), будет 100.

Вывод должен быть:

SalesPerson  Date         MySalesAmount  RelatedSalesPersonSalesAmount
S1           20150101     50             0
S1           20150201     50             0
S1           20150301     50             0
S1           20150401     50             0
S1           20150501     50             0
S1           20150601     0              50
S1           20150701     0              50
S2           20150101     0              50
S2           20150201     0              50
S2           20150301     0              50
S2           20150401     0              50
S2           20150501     0              50
S2           20150601     50             0
S2           20150701     50             0

Может ли кто-нибудь помочь в этом для достижения вышеупомянутого результата с помощью запроса?

Ответы [ 4 ]

1 голос
/ 15 марта 2019

Это кажется сложным.Очевидно, сумма продавца достаточно проста:

select salesperson, sum(salesamt)
from t
group by salesperson;

Для соответствующей суммы нам нужны суммы продаж для других продавцов, которые продали те же продукты.

Я думаю, что я сам присоединяюсьна помощь приходит:

select t.salesperson, 
       sum(case when t.salesperson = t2.salesperson then t.salesamnt end) as mysales,
       sum(case when t.salesperson <> t2.salesperson then t.salesamnt end) as othersales
from t join
     t t2
     on t.product = t2.product
group by t.salesperson
0 голосов
/ 15 марта 2019
declare @sales table 
(productid int, SalesAmt int , SalesPerson varchar(100))

insert into @sales
values
(1 ,         50  ,         'S1'),
(2  ,        50   ,        'S2'),
(1  ,        100 ,         'S2'),
(3,         100 ,         'S1'),
(3 ,         150 ,         'S3'),
(2 ,         100  ,        'S3')


select t.salesperson, sum(SalesAmt) [Person Sale],
   (select sum(SalesAmt) from  @sales s where s.SalesPerson <> t.salesperson 
) [Total Sale]
from @sales t 
group by t.salesperson

введите описание изображения здесь

0 голосов
/ 15 марта 2019

Проверьте следующий запрос:

declare @sales table 
(productid int, TransDate date,SalesPerson varchar(100),Amount bigint);

insert into @sales(productid, TransDate, Amount, SalesPerson)
values
(1, '20150101', 50, 'S1'),
(1, '20150201', 50, 'S1'),
(1, '20150301', 50, 'S1'),
(1, '20150401', 50, 'S1'),
(1, '20150501', 50, 'S1'),
(1, '20150601', 50, 'S2'),
(1, '20150701', 50, 'S2'),
(1, '20150601', 10, 'S3'),
(1, '20150701', 10, 'S3');

select distinct
  SalesPerson,
  sum(Amount) over (partition by productid, SalesPerson) as MySalesAmount,
  sum(Amount) over (partition by productid) -
    sum(Amount) over (partition by productid, SalesPerson) as RelatedSalesPersonSalesAmount
from @sales;

Выход:

+-------------+---------------+-------------------------------+
| SalesPerson | MySalesAmount | RelatedSalesPersonSalesAmount |
+-------------+---------------+-------------------------------+
| S1          |           250 |                           120 |
| S2          |           100 |                           270 |
| S3          |            20 |                           350 |
+-------------+---------------+-------------------------------+

Протестируйте его онлайн с rextester .

Обновление:

select
  x.productid,
  x.SalesPerson,
  y.TransDate as [Date],
  iif(x.SalesPerson = y.SalesPerson, y.Amount, 0) as MySalesAmount,
  iif(x.SalesPerson = y.SalesPerson, 0, y.Amount) as RelatedSalesPersonSalesAmount
from (select distinct productid, SalesPerson from @sales) as x
join @sales as y
  on x.productid = y.productid
order by x.productid, x.SalesPerson;

Выход:

+-----------+-------------+---------------------+---------------+-------------------------------+
| productid | SalesPerson |        Date         | MySalesAmount | RelatedSalesPersonSalesAmount |
+-----------+-------------+---------------------+---------------+-------------------------------+
|         1 | S1          | 01.01.2015 00:00:00 |            50 |                             0 |
|         1 | S1          | 01.02.2015 00:00:00 |            50 |                             0 |
|         1 | S1          | 01.03.2015 00:00:00 |            50 |                             0 |
|         1 | S1          | 01.04.2015 00:00:00 |            50 |                             0 |
|         1 | S1          | 01.05.2015 00:00:00 |            50 |                             0 |
|         1 | S1          | 01.06.2015 00:00:00 |             0 |                            50 |
|         1 | S1          | 01.07.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.01.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.02.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.03.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.04.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.05.2015 00:00:00 |             0 |                            50 |
|         1 | S2          | 01.06.2015 00:00:00 |            50 |                             0 |
|         1 | S2          | 01.07.2015 00:00:00 |            50 |                             0 |
+-----------+-------------+---------------------+---------------+-------------------------------+
0 голосов
/ 15 марта 2019

Попробуйте это -

declare @sales table 
(productid int, transDate date, amount bigint, salesperson varchar(100))

insert into @sales
values
(1 ,         '20150101',      50  ,         'S1'),
(1 ,         '20150201',      50  ,         'S1'),
(1 ,         '20150301',      50  ,         'S1'),
(1 ,         '20150401',      50  ,         'S1'),
(1 ,         '20150501',      50  ,         'S1'),
(1 ,         '20150601',      50  ,         'S2'),
(1 ,         '20150701',      50  ,         'S2')

;with cteSales as
(select s.salesperson, productid, sum(amount) amount
from @sales s
group by s.salesperson, productid)
select s1.salesperson, s1.productid, 
       sum(case when s1.salesperson = s2.salesperson  then s1.amount else 0 end) as mysales,
       sum(case when s1.salesperson <> s2.salesperson   then s2.amount else 0 end) as othersales
 from cteSales s1 inner join cteSales s2
on s1.productid = s2.productid
group by s1.salesperson, s1.productid
...