Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом на группировку данных / 10 сообщений из 10, страница 1 из 1
25.03.2018, 14:19
    #39620125
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Добрый день.

Есть данные в следующем виде
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
declare @data table (s_id int, s_name nvarchar(100), contactsCount int, statusChangeOrder int, a_id int)
insert into @data values
(13,'Х. не обработан',1,1,195943),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195943),
(1013,'Х.Почта ИМЯ ЕСТЬ',13,3,195943),
(15,'Х. отказ',1,4,195943),
(13,'Х. не обработан',1,1,195944),
(1013,'Х.Почта ИМЯ ЕСТЬ',1,2,195944),
(2079,'Курьерская доставка',1,3,195944),
(1035,'Х. отложен',1,4,195944),
(14,'Х.Почта БЕЗ ИМЕНИ',1,5,195944),
(13,'Х. не обработан',1,1,195945),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195945),
(13,'Х. не обработан',1,1,195946),
(1013,'Х.Почта ИМЯ ЕСТЬ',8,2,195946),
(2090,'Запрос реквизитов',22,3,195946),
(15,'Х. отказ',1,4,195946),
(13,'Х. не обработан',1,1,195947),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195947),
(13,'Х. не обработан',1,1,195948),
(1013,'Х.Почта ИМЯ ЕСТЬ',1,2,195948),
(2079,'Курьерская доставка',1,3,195948),
(1035,'Х. отложен',2,4,195948),
(13,'Х. не обработан',1,1,195949),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195949),
(13,'Х. не обработан',1,1,195950),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',2,2,195950),
(1013,'Х.Почта ИМЯ ЕСТЬ',16,3,195950),
(13,'Х. не обработан',1,1,195951),
(1013,'Х.Почта ИМЯ ЕСТЬ',10,2,195951),
(15,'Х. отказ',1,3,195951),
(13,'Х. не обработан',1,1,195952),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',2,2,195952),
(1013,'Х.Почта ИМЯ ЕСТЬ',3,3,195952),
(2090,'Запрос реквизитов',1,4,195952),
(3092,'Реквизиты получены',1,5,195952),
(2082,'Счёт выставлен',6,6,195952),
(2083,'Отказ после счёта',1,7,195952)

select * from @data


Где s_id - Код статуса,
s_name - наименование статуса, проставленного менеджером по результатам разговора с клиентом,
contactsCount - количество контактов в данном статусе без его изменения,
statusChangeOrder - порядок простановки менеджером данного статуса по данному клиенту,
a_id - код контрагента

Необходимо сгруппировать данные так, чтобы получить воронки продаж. Иными словами, цепочки изменения статусов с количеством контрагентов по данной цепочке статусов, где цепочка изменения статусов определяется количеством статусов, их наименованием и порядком присвоения. Помогите, пожалуйста, с запросом.
...
Рейтинг: 0 / 0
25.03.2018, 14:24
    #39620129
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
приведите пример
- исходные данные (минимально достаточные для получения пары этих ваших цепочек)
- результат какой хотите получить с объяснением как именно он получается
...
Рейтинг: 0 / 0
25.03.2018, 14:35
    #39620131
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Да, прошу прощения за не точность.

Пример данных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare @data table (s_id int, s_name nvarchar(100), contactsCount int, statusChangeOrder int, a_id int)
insert into @data values
(13,'Х. не обработан',1,1,195943),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195943),
(1013,'Х.Почта ИМЯ ЕСТЬ',13,3,195943),
(15,'Х. отказ',1,4,195943),

(13,'Х. не обработан',1,1,195944),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195944),
(1013,'Х.Почта ИМЯ ЕСТЬ',13,3,195944),
(15,'Х. отказ',1,4,195944),

(13,'Х. не обработан',1,1,195945),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195945),

(13,'Х. не обработан',1,1,195946),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195946),

(13,'Х. не обработан',1,1,195947),
(1013,'Х.Почта ИМЯ ЕСТЬ',1,2,195947),
(2079,'Курьерская доставка',1,3,195947),
(1035,'Х. отложен',1,4,195947),
(14,'Х.Почта БЕЗ ИМЕНИ',1,5,195947)

select * from @data



Необходимый результат (с сортировкой по глубине цепочки):
Кол-во клиентов 123452 Х. не обработанХ.Перезвон БЕЗ ИМЕНИ2Х. не обработанХ.Перезвон БЕЗ ИМЕНИХ.Почта ИМЯ ЕСТЬХ. отказ1Х. не обработанХ.Почта ИМЯ ЕСТЬКурьерская доставкаХ. отложенХ.Почта БЕЗ ИМЕНИ
...
Рейтинг: 0 / 0
25.03.2018, 22:27
    #39620225
andrey odegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
PIVOT в помощь

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare @data table (s_id int, s_name nvarchar(100), contactsCount int, statusChangeOrder int, a_id int)
insert into @data values
(13,N'Х. не обработан',1,1,195943),
(1041,N'Х.Перезвон БЕЗ ИМЕНИ',1,2,195943),
(1013,N'Х.Почта ИМЯ ЕСТЬ',13,3,195943),
(15,N'Х. отказ',1,4,195943),

(13,N'Х. не обработан',1,1,195944),
(1041,N'Х.Перезвон БЕЗ ИМЕНИ',1,2,195944),
(1013,N'Х.Почта ИМЯ ЕСТЬ',13,3,195944),
(15,N'Х. отказ',1,4,195944),

(13,N'Х. не обработан',1,1,195945),
(1041,N'Х.Перезвон БЕЗ ИМЕНИ',4,2,195945),

(13,N'Х. не обработан',1,1,195946),
(1041,N'Х.Перезвон БЕЗ ИМЕНИ',4,2,195946),

(13,N'Х. не обработан',1,1,195947),
(1013,N'Х.Почта ИМЯ ЕСТЬ',1,2,195947),
(2079,N'Курьерская доставка',1,3,195947),
(1035,N'Х. отложен',1,4,195947),
(14,N'Х.Почта БЕЗ ИМЕНИ',1,5,195947)



Код: sql
1.
2.
3.
4.
select count(*),[1],[2],[3],[4],[5]
from (select s_name,statuschangeorder,a_id from @data) s
pivot(max(s_name) for statuschangeorder in([1],[2],[3],[4],[5])) p
group by [1],[2],[3],[4],[5];
...
Рейтинг: 0 / 0
26.03.2018, 10:52
    #39620387
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
andrey odegov,

Спасибо! Уточните еще, пожалуйста, по сортировке. На тестовом примере сортировка верная, но она явно не определена в запросе. А на реальных данных сортировка слетает, например, как указано ниже. Четвертая строка должна идти 2-ой.

Кол-во клиентов 1 2 3 4 52 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ2 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ Х. отказ1 Х. не обработан Х.Почта ИМЯ ЕСТЬ Курьерская доставка Х. отложен Х.Почта БЕЗ ИМЕНИ1 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ
...
Рейтинг: 0 / 0
26.03.2018, 11:13
    #39620400
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Vsevolod V,

Код: sql
1.
2.
3.
4.
5.
6.
7.
Order by 
case When [1] is null Then 0 else 1 End,
case When [2] is null Then 0 else 1 End,
case When [3] is null Then 0 else 1 End,
case When [4] is null Then 0 else 1 End,
case When [5] is null Then 0 else 1 End,
[1],[2],[3],[4],[5]
...
Рейтинг: 0 / 0
26.03.2018, 11:17
    #39620402
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Vsevolod V,

Хотя пустые и так выйдут вверху так что
Код: sql
1.
ORder by [1],[2],[3],[4],[5]
...
Рейтинг: 0 / 0
26.03.2018, 11:29
    #39620410
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Kopelly,

Это фантастика! Спасибо за помощь!)
...
Рейтинг: 0 / 0
07.04.2018, 12:02
    #39627113
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Добрый день.

Помогите, пожалуйста, скорректировать запрос.
Мне необходимо добавить фильтр по статусу, чтобы при заданном фильтре отображались цепочки изменения статусов, начиная с заданного статуса. Простите за путанницу)

Пример данных:

declare @data table (s_id int, s_name nvarchar(100), contactsCount int, statusChangeOrder int, a_id int)
insert into @data values
(13,'Х. не обработан',1,1,195943),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195943),
(1013,'Х.Почта ИМЯ ЕСТЬ',13,3,195943),
(15,'Х. отказ',1,4,195943),

(13,'Х. не обработан',1,1,195944),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195944),
(1013,'Х.Почта ИМЯ ЕСТЬ',13,3,195944),
(15,'Х. отказ',1,4,195944),

(13,'Х. не обработан',1,1,195945),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195945),

(13,'Х. не обработан',1,1,195946),
(1041,'Х.Перезвон БЕЗ ИМЕНИ',4,2,195946),

(13,'Х. не обработан',1,1,195947),
(1013,'Х.Почта ИМЯ ЕСТЬ',1,2,195947),
(2079,'Курьерская доставка',1,3,195947),
(1035,'Х. отложен',1,4,195947),
(14,'Х.Почта БЕЗ ИМЕНИ',1,5,195947),

(13,'Х. не обработан',1,1,195948),
(1013,'Х.Перезвон БЕЗ ИМЕНИ',1,2,195948),
(2079,'Х.Почта ИМЯ ЕСТЬ',1,3,195948),

(13,'Х. не обработан',1,1,195949),
(1035,'Х. отложен',1,2,195949),
(1013,'Х.Перезвон БЕЗ ИМЕНИ',1,3,195949),
(2079,'Х.Почта ИМЯ ЕСТЬ',1,4,195949)

select * from @data


Запрос, в который надо добавить фильтр
Код: sql
1.
2.
3.
4.
5.
select count(*),[1],[2],[3],[4],[5]
from (select s_name,statuschangeorder,a_id from @data) s
pivot(max(s_name) for statuschangeorder in([1],[2],[3],[4],[5])) p
group by [1],[2],[3],[4],[5]
order by [1],[2],[3],[4],[5]



Результат без фильтра по статусу
Кол-во клиентов 1 2 3 4 51 Х. не обработан Х. отложен Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ2 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ1 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ2 Х. не обработан Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ Х. отказ1 Х. не обработан Х.Почта ИМЯ ЕСТЬ Курьерская доставка Х. отложен Х.Почта БЕЗ ИМЕНИ

Необходимый результат с фильтром по статусу "Х.Перезвон БЕЗ ИМЕНИ"
Кол-во клиентов 1 2 32 Х.Перезвон БЕЗ ИМЕНИ2 Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ2 Х.Перезвон БЕЗ ИМЕНИ Х.Почта ИМЯ ЕСТЬ Х. отказ
...
Рейтинг: 0 / 0
07.04.2018, 12:21
    #39627114
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на группировку данных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @f nvarchar(128) = N'Х.Перезвон БЕЗ ИМЕНИ';

with data as (select * 
                      from @data as t
                     where exists( select * from @data as x where x.s_name = @f and x.a_id = t.a_id and x.statusChangeOrder <= t.statusChangeOrder )
                   )
select count(*),[1],[2],[3],[4],[5]
from (select s_name,statuschangeorder,a_id from data) s
pivot(max(s_name) for statuschangeorder in([1],[2],[3],[4],[5])) p
group by [1],[2],[3],[4],[5]
order by [1],[2],[3],[4],[5]



Не в коня корм.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом на группировку данных / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]