Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на агрегацию текстового поля? / 3 сообщений из 3, страница 1 из 1
23.03.2015, 15:14
    #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
25.03.2015, 07:38
    #38915872
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на агрегацию текстового поля?
sanringo,

Strtran посмотри
...
Рейтинг: 0 / 0
29.03.2015, 22:33
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на агрегацию текстового поля? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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