Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GROUP_CONCAT в ADS, Эквивалент GROUP_CONCAT из MySQL в ADS 
V
    Опции темы
sinepolsky
Дата 16.7.2015, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.7.2015

Репутация: нет
Всего: нет



В MySQL есть полезная агрегатная строковая функция  GROUP_CONCAT . 
Суть в следующем: например, есть в таблице t такие записи 
t
+--+--+
|a |b |
+--+--+
|01|10|
|01|11|
|01|15|
|01|19|
|02|22|
|02|25|
|02|27|
|02|28|
+--+--+

Выполнение запроса
SELECT a,GROUP_CONCAT(b WITH SEPARATOR ',') as G from t GROUP BY a
дает следующий результат
+--+-----------+
|a |     G     |
+--+-----------+
|01|10,11,15,19|
|02|22,25,27,28|
+--+-----------+

Как такую возможность реализовать в Advantage Database Server или есть ли там нечто похожее?
PM MAIL   Вверх
sinepolsky
Дата 25.3.2021, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.7.2015

Репутация: нет
Всего: нет



Сам спросил, сам ответил  smile 
Спустя 6 лет ответ был найден.  smile 
Отдельной функции нет, но есть возможность через курсор пройтись по строкам и записывать в результирующую таблицу.

Код

declare @c cursor;
try drop table #t; drop table #result; catch all end try;

/*исходная таблица */
create table #t(
  id integer,
  val char(32) /* строки, что будут склеиваться для каждого разного id*/
);

/*результат*/
create table #result(
  id integer,
  group_val memo 
  /*если длина склеенной строки неизвестна - тип memo, хотя можно, например, char(256)*/
);

/*Данные для примера*/
insert into #t(id) values(5);  
insert into #t values(1,'x');
insert into #t values(1,'y');
insert into #t values(2,'a');
insert into #t values(2,'c');
insert into #t values(2,'b');
insert into #t values(3,'t');
insert into #t(id) values(4);
insert into #t values(4,'v');

open @c as select * from #t /*можно поиграться с ORDER BY, тут не важно*/ ;
while fetch @c do
 IF (select count(*) from #result where [email protected])=0 THEN
   /*если значения еще не было - добавление с проверкой на NULL*/
   insert into #result(id,group_val) 
     values(@c.id, trim(isnull(@c.val,'')));
 ELSE
   /*если было - обновляем поле, склеиваем строки с разделителем запятая (,)*/
   update #result set group_val = isnull(group_val,'') 
     + iif(length(isnull(group_val,''))=0,'',',')
     + trim(isnull(@c.val,''))
   where [email protected];  
 END IF;      
end while;
close @c;

/*РЕЗУЛЬТАТ*/
select* from #result;



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Advantage Database Server | Следующая тема »


 




[ Время генерации скрипта: 0.1139 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.