![]() |
![]() |
![]() |
|
Конкатенация ТЗ с группировкой 8.3.27 XLife, kubik_live, ИначеЕсли, глазковыколупыватель, МаленькийВопросик, X Leshiy, Garykom, Wern, unenu, San787, Климов Сергей, takefive, zenik, Dен, BOOL, Eiffil123, АгентБезопаснойНацио, Kongo2019, boozin, Михаил_, obs191, maxab72, Crusher, PR, Мультук, PLUT, Михаил Козлов, Rokford, fbear, Олдж, Terrixus, stix2010, Mihenius, VladZ, Жеглофф, Галахад, Pinta2017, Silgis, mortal, Hawk_1c, Ногаминебить, Шурик71, Prog_man, Alex7771, dmt, craxx, maxar, Homer, reloc, 2S, saradip, shuhard, d4rkmesa, Krendel, okmail, viraboy, НачинающийВосьмерочн, lubitelxml, Guk, ndrv, nabd, Буковка, denk32, comp2006
| ☑ | ||
---|---|---|---|---|
0
saradip
03.10.25
✎
11:50
|
Добрый день.
Подскажите, пожалуйста, способ/алгоритм решения задачи: Есть таблица значений Партнер Телефон Примечение Иван 89111111111 Олеся Иван 89111111112 Снежана Петр 89222222222 Петух Петр 89222222223 Дятел Нужно сгруппировать партнера и склеить строку партнер + телефон + примечание в следующем виде: Иван 89111111111 Олеся, 89111111112 Снежана Петр 89222222222 Петух, 89222222223 Дятел Инструментов для решения три: 1. код 2. скд 3. запрос |
|||
1
kubik_live
03.10.25
✎
12:17
|
На выходе то что?
Таблица значений? Массив? |
|||
2
unenu
03.10.25
✎
12:18
|
запрос конечно
|
|||
3
saradip
03.10.25
✎
12:36
|
(1) ТЗ
|
|||
4
craxx
03.10.25
✎
12:22
|
(2) Не согласен. СКД проще.
|
|||
5
timurhv
03.10.25
✎
12:23
|
||||
6
timurhv
03.10.25
✎
12:26
|
"Петух", "Дятел" - так в ТЗ написано? У вас что, дружный токсичный коллектив? :)
|
|||
7
ads55
03.10.25
✎
12:31
|
(6) "У вас что, дружный токсичный коллектив? :)"
Это ты ещё ник ТС-а задом наперед не прочитал :) ЗЫ. Я за СКД |
|||
8
saradip
03.10.25
✎
12:32
|
Вообще, можно запросом данные в отсортированную по партнеру выборку закинуть и в цикле присваивать переменной "ПредыдущийПартнер" и "ТекущийПартнер" значения партнера, если предыдущий = текущий складывать значения (телефона + примечание) в переменную "контакты".
В итоге получится тз с решением |
|||
9
saradip
03.10.25
✎
12:33
|
(5) Спасибо, отличная информация
|
|||
10
timurhv
03.10.25
✎
12:35
|
(7)
|
|||
11
unenu
03.10.25
✎
12:44
|
(10) зато не бот и вопрос грамотный.
|
|||
12
saradip
03.10.25
✎
14:04
|
Так и что, кто там писал про СКД, не вижу решения)
В результате, если у партнера три контакта, должно быть поле вида: Партнер + телефон + примечание + телефон + примечание + телефон + примечание |
|||
13
Homer
03.10.25
✎
14:22
|
(12) тебе в (5) все показали
|
|||
14
Garykom
гуру
03.10.25
✎
16:21
|
(0) Классически это запрос с группировками + обход по группировкам
|
|||
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 секций тут лишнее. Достаточно двух, а далее дополнение текста через параметр. |
|||
16
Eiffil123
03.10.25
✎
16:50
|
(12) кодом конечно же. Сделать копию таблицы, свернуть по полям 1 и 2. потом циклом по ней и поиском строк в исходной.
Суммировать поля в массив, соединить через СтрСоединить |
|||
17
unenu
03.10.25
✎
16:53
|
(16) а если это BI и там миллиард записей? )
|
|||
18
Garykom
гуру
03.10.25
✎
18:40
|
(15) Плохое решение с подзапросами
Особенно если надо делать допобработку номеров и имен Например нормализовывать их Тогда один фиг будут циклы уже кодом Так что не проще ли сразу запросом только получить данные и сгруппировать по нужному партнеру А сложение контактов внутри группы делать уже кодом? Заодно еще как надо в том же цикле обрабатывая |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |