powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом на группировку данных
10 сообщений из 10, страница 1 из 1
Помогите с запросом на группировку данных
    #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
Помогите с запросом на группировку данных
    #39620129
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приведите пример
- исходные данные (минимально достаточные для получения пары этих ваших цепочек)
- результат какой хотите получить с объяснением как именно он получается
...
Рейтинг: 0 / 0
Помогите с запросом на группировку данных
    #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
Помогите с запросом на группировку данных
    #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
Помогите с запросом на группировку данных
    #39620387
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey odegov,

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

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

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

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


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