yaswanthkrishna Ответов: 1

Нужен SQL запрос для команды продаж на основе управляющего и нарастающим итогом, как показано ниже логики


ПРИВЕТ,

У меня есть 4 столбца как показано ниже здесь мои фильтры EmpName и Month
1.Столбец empname
2.Менеджер
3.EmpSales
4.Месяц

Мне нужен столбец Team Sales и MTD sales из запроса, который дает результат, основанный на приведенной ниже логике

Логика командных продаж :если я выберу Emp A, то у нас будет 100 продаж и 450 командных продаж (что является суммой A+E+F) за 1 месяц

Логика продаж MTD : если я выберу Emp месяц 1, то он должен показать то же самое, что и значение продаж команды 450, но если я выберу месяц 2, он должен показать 1050(что является суммой месяца 1 и месяца 2)


EmpName Manager  Empsales  TeamSales Month  MTDsales 
A         X        100        450     1      450 
E         X        200        450     1      450 
F         X        150        450     1      450 
B         Y        100        300     1      300 
C         Y        200        300     1      300 
D         Z        150        250     1      250 
G         Z        100        250     1      250 
A         X        150        600     2     1050 
E         X        250        600     2     1050 
F         X        200        600     2     1050 
B         Y        100        350     2      650 
C         Y        250        350     2      650 
D         Z        200        300     2      550 
G         Z        100        300     2      550


Спасибо,
Ясвант

Что я уже пробовал:

Пробовал по-разному в sql-запросе, но нужно

barneyman

что вы пробовали?

(а TeamSales-это совершенно избыточный столбец, его можно вычислить)

CHill60

Просто для записи, которая должна быть YTD (год до даты), а не MTD (месяц до даты)

1 Ответов

Рейтинг:
9

kosmas kafataridis

я считаю, что это ваш ответ

CREATE TABLE #test (EmpName NVARCHAR(50), Manager NVARCHAR(50), Empsales INT, [Month] int);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('A', 'X', 100,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('E' , 'X' , 200 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('F' , 'X' , 150 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('B' , 'Y' , 100 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('C' , 'Y' , 200 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('D' , 'Z' , 150 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('G' , 'Z' , 100 ,1);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('A' , 'X' , 150 ,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('E' , 'X' ,250 ,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('F' ,'X', 200 ,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('B', 'Y' , 100 ,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('C' , 'Y' , 250,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('D' , 'Z' , 200 ,2);
insert into #test (EmpName, Manager , Empsales , [Month]) values ('G' , 'Z' , 100 ,2);
declare @ToMonth int=2;
declare @FromMonth int=1;

SELECT a.EmpName, a.Manager , a.[Month], SUM(Empsales) Empsales, TeamSales, MTDsales FROM #test a JOIN (SELECT Manager, [Month], SUM(Empsales) TeamSales FROM #test where [Month]=@tomonth group by Manager, [Month]) TeamSales on a.Manager=TeamSales.Manager and a.[Month]=TeamSales.[Month]
 JOIN (SELECT Manager, Max([Month]) [Month], SUM(Empsales) MTDsales FROM #test where [Month]>=@FromMonth and [Month]<=@ToMonth group by Manager) MTDsales  on a.Manager=MTDsales.Manager and a.[Month]=MTDsales.[Month]
 group by a.EmpName, a.Manager , a.[Month], TeamSales, MTDsales


DROP TABLE #test


выход

EmpName	Manager	Month	Empsales	TeamSales	MTDsales
A	X	2	150	600	1050
B	Y	2	100	350	650
C	Y	2	250	350	650
D	Z	2	200	300	550
E	X	2	250	600	1050
F	X	2	200	600	1050
G	Z	2	100	300	550