powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на агрегацию текстового поля?
3 сообщений из 3, страница 1 из 1
Запрос на агрегацию текстового поля?
    #38913595
sanringo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть у нас есть таблица myTable и в нём поле name. Требуется его агрегировать с разделителями.
В PostgreSQL я бы сделал так
Код: sql
1.
2.
3.
4.
5.
SELECT
   string_agg(name, "; ") AS name
FROM myTable
GROUP BY
   myField


Как сделать аналогично для Visual FoxPro?
...
Рейтинг: 0 / 0
Запрос на агрегацию текстового поля?
    #38915872
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanringo,

Strtran посмотри
...
Рейтинг: 0 / 0
Запрос на агрегацию текстового поля?
    #38920553
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял, что Вам нужно, то Вы хотите "сложить" содержимое текстового поля из разных строк в одну строку для каждой группы. В FoxPro такой функции нет. Придется писать самому. Ну, что-то вроде такого

Код: 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.
41.
42.
* Исходные данные
Create Cursor test (f1 i, f2 c(10))
insert into test (f1, f2) values (1, 'один')
insert into test (f1, f2) values (1, 'два')
insert into test (f1, f2) values (2, 'три')
insert into test (f1, f2) values (2, 'четыре')

* Результирующий курсор, в который пойдет запись
* Предполагаю, что общая длина "склеенной" строки не превышает 255 символов
* Если результат может превышать 254 символов, то следует использовать поле типа memo
Create cursor result (f1 i, f2 c(254))

* Предварительная выборка, чтобы упорядочить данные в нужной последовательности
select f1, f2 from test into cursor curSort order by f1,f2

local lif1prev, lcf2
lif1prev = 0    && Заведомо не существующее значение поля f1 для инициализации переменных
lcf2 = ""
select curSort
scan
    if lif1prev = curSort.f1 
        lcf2 = m.lcf2 + "; " + alltrim(curSort.f2)
    else
        if lif1prev <> 0
            * Записываю очередную группу в результирующую таблицу
            insert into result (f1, f2) values (m.lif1prev, m.lcf2)
        endif
        * Сброс переменных для очередной группы
        lif1prev = curSort.f1 
        lcF2 = alltrim(curSort.f2)
    endif
endscan

if lif1prev <> 0
    * Записываю последнюю группу в результирующую таблицу
    insert into result (f1, f2) values (m.lif1prev, m.lcf2)
endif

* Смотрим результат
select result
go top
browse nowait



PS: Далеко не факт, что программист, работающий в одном языке программирования, знает команды и функции другого. В данном случае, не факт, что все знают, что делает функция string_agg() в PostgreSQL. Поэтому в будущем, просто приведите пример исходной таблицы и что хотите получить в результате. В смысле, исходные данные и результирующий набор данных.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на агрегацию текстового поля?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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