0
saradip
03.10.25
✎
11:50
|
Добрый день.
Подскажите, пожалуйста, способ/алгоритм решения задачи:
Есть таблица значений
Партнер Телефон Примечение
Иван 89111111111 Олеся
Иван 89111111112 Снежана
Петр 89222222222 Петух
Петр 89222222223 Дятел
Нужно сгруппировать партнера и склеить строку партнер + телефон + примечание в следующем виде:
Иван 89111111111 Олеся, 89111111112 Снежана
Петр 89222222222 Петух, 89222222223 Дятел
Инструментов для решения три:
1. код
2. скд
3. запрос
|
|
15
unenu
03.10.25
✎
16:39
|
Подробности
ВЫБРАТЬ
"Иван" КАК Партнер,
"89111111111" КАК Телефон,
"Олеся" КАК Примечание
ПОМЕСТИТЬ ВТ_Набор
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Петр",
"89222222222",
"Тукан"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Иван",
"89111111112",
"Снежана"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Петр",
"89222222223",
"Дятел"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Вася",
"89222222224",
"Лиса"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Вася",
"89222222225",
"Глухарь"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Вася",
"89222222226",
"Павлин"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Саша",
"89222222227",
"Дрозд"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Саша",
"89222222228",
"Лосось"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Саша",
"89222222229",
"Колбаса"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Саша",
"89222222230",
"Пиво"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Саша",
"89222222231",
"Слива"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТТ.Партнер КАК Партнер,
ТТ.Инфо КАК Инфо,
АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи,
1 КАК Счетчик
ПОМЕСТИТЬ ВТ_НомерЗаписи
ИЗ
(ВЫБРАТЬ ПЕРВЫЕ 1000000000
Т.Партнер КАК Партнер,
Т.Телефон + " " + Т.Примечание КАК Инфо
ИЗ
ВТ_Набор КАК Т
УПОРЯДОЧИТЬ ПО
Партнер,
Т.Телефон) КАК ТТ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТТ.Партнер КАК Партнер,
ТТ.Инфо КАК Инфо,
ТТ.НомерВГруппе КАК НомерВГруппе
ПОМЕСТИТЬ ВТ_ПорядокГрупп
ИЗ
(ВЫБРАТЬ
Т1.Партнер КАК Партнер,
Т1.Инфо КАК Инфо,
СУММА(Т2.Счетчик) КАК НомерВГруппе
ИЗ
ВТ_НомерЗаписи КАК Т1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НомерЗаписи КАК Т2
ПО Т1.Партнер = Т2.Партнер
И Т1.НомерЗаписи >= Т2.НомерЗаписи
СГРУППИРОВАТЬ ПО
Т1.Партнер,
Т1.Инфо) КАК ТТ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Т.Партнер КАК Партнер,
МАКСИМУМ(ВЫБОР
КОГДА Т.НомерВГруппе = 1
ТОГДА Т.Инфо
ИНАЧЕ ""
КОНЕЦ) + МАКСИМУМ(ВЫБОР
КОГДА Т.НомерВГруппе = 2
ТОГДА ", " + Т.Инфо
ИНАЧЕ ""
КОНЕЦ) + МАКСИМУМ(ВЫБОР
КОГДА Т.НомерВГруппе = 3
ТОГДА ", " + Т.Инфо
ИНАЧЕ ""
КОНЕЦ) + МАКСИМУМ(ВЫБОР
КОГДА Т.НомерВГруппе = 4
ТОГДА ", " + Т.Инфо
ИНАЧЕ ""
КОНЕЦ) + МАКСИМУМ(ВЫБОР
КОГДА Т.НомерВГруппе = 5
ТОГДА ", " + Т.Инфо
ИНАЧЕ ""
КОНЕЦ) + &ДополнительныйТекстКогдаПорядокБольше5 КАК ИнфоВсе
ИЗ
ВТ_ПорядокГрупп КАК Т
СГРУППИРОВАТЬ ПО
Т.Партнер
Запросом считаю проще. Текст запроса просто забросьте в консоль и готово.
Программно гораздо легче динамически добавить текст в запрос
&ДополнительныйТекстКогдаПорядокБольше5 если частей строки N.
Вычислить N можно сверткой исходной таблицы.
Реализация такой задачи в СКД(программно) - это гораздо больше кода и мороки.
Да и 5 секций тут лишнее. Достаточно двух, а далее дополнение текста через параметр.
|
|