SUM для текста

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
shempeev
Сообщения: 8
Зарегистрирован: 13 окт 2006, 16:07

SUM для текста

Сообщение shempeev » 26 ноя 2006, 16:53

Ворос у меня такой

Я так понял что агрегирующих функций для concat'а текста
нет

Как написать UDF функцию на delphi для соединения текста записей

(У меня проблема возникла именно с агрегирующими функ. , т.е как передать уже имеющийся текст в функцию и прикрепить к нему следующий текст)

в запросе мне нужно примерно след.:

select main.sur, (select <CONCAT_STRING (fam.sur)> from fam where fam.idz=main.idz) as fam_ from from main

FireBird 1.5

Заранее спасибо

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 26 ноя 2006, 17:47

А не проще процедурой сделать?

shempeev
Сообщения: 8
Зарегистрирован: 13 окт 2006, 16:07

Сообщение shempeev » 26 ноя 2006, 18:01

mdfv писал(а):А не проще процедурой сделать?
Всмысле сделать временную таблицу и туда это все?

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 26 ноя 2006, 19:15

что-то вроде этого

Код: Выделить всё


for select sur,idz  from main 
into :sur,:midz
do
begin
  fam_ ='';  
  for select sur  from fam 
  where fam.idz=:midz
  into :fsur
  do
  fam_=fam_||fsur;

  suspend;

end

shempeev
Сообщения: 8
Зарегистрирован: 13 окт 2006, 16:07

Сообщение shempeev » 26 ноя 2006, 19:55

mdfv писал(а):что-то вроде этого

Код: Выделить всё


for select sur,idz  from main 
into :sur,:midz
do
begin
  fam_ ='';  
  for select sur  from fam 
  where fam.idz=:midz
  into :fsur
  do
  fam_=fam_||fsur;

  suspend;

end
да да так
уже и начял делать

значит думаем правильно

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 ноя 2006, 12:06

shempeev писал(а):значит думаем правильно
Не забудь также подумать над переполнением этой строки.
Правильный путь - определиться с её максимумом, и вставить проверку, чтобы если присоединение следующего значения его превысит, резать строку.

Ответить