Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запросом или процедурой получить 'столбец' в виде строки? [D7, FB 2]


Col2Row ©   (2009-12-25 22:25:00) 

Есть таблица, с некоторым полем:

Field1

В таблице 4 записи с 4-мя значениями поля Field1:

Value1
Value2
Value3
Value4

Нужно запросом или процедурой получить такую строчку:

Value1\Value2\Value3\Value4


Кщд   (2009-12-28 09:58:00) [1]

>Col2Row   (27.12.09 23:47) [18]
доку принципиально не читаем?
ibase.ru: substring
а коли уж делаете на psql, то кто мешает не дописывать разделитель после последней строки?


Col2Row   (2009-12-27 23:47:00) [2]

>ну вы поняли смысл

Смысл я как бы знал :) Вот только как это на sql выразить...


12   (2009-12-27 12:26:00) [3]

нет конечно
очень болит голова
ну вы поняли смысл


sniknik   (2009-12-27 11:28:00) [4]

> if length(s) > 0 then setlength(s,length(s)-1)
FB уже паскаль код поддерживает? круто!


12   (2009-12-27 11:23:00) [5]

if length(s) > 0 then setlength(s,length(s)-1)


Col2Row   (2009-12-26 16:01:00) [6]

Как бы еще последнюю '\' убрать :) Попробовал в основном запросе - работает почти идеально :) Только в конце оставляет лишнее '\'.


Col2Row   (2009-12-26 15:51:00) [7]

Поменял переменные на VARCHAR. Trim не нужен.


Col2Row   (2009-12-26 15:49:00) [8]

>Ну добавь "бла-бла". Вернет нужное с "бла-бла"?

Всё дало :) Сам додумался: TEMP = Trim(TEMP). Всем спасибо.


Sergey13   (2009-12-26 14:17:00) [9]

> [9] Col2Row   (26.12.09 13:10)
> Добавил TEMP = "

Ну добавь "бла-бла". Вернет нужное с "бла-бла"?


Col2Row   (2009-12-26 13:11:00) [10]

Сорри, на TEMP = TEMP || :DIVIDER, кусок кода пролез :)


Col2Row   (2009-12-26 13:10:00) [11]

Спасибо, уже немного продвинулись :)

Добавил TEMP = ""; пишет - numeric overflow or string iruncaction.
Пишет даже на "TEMP = TEMP || :MODALITY_DIVIDER". То есть - не может сложить две переменные.


Sergey13   (2009-12-26 12:56:00) [12]

> [7] Col2Row   (26.12.09 12:49)

ну так TEMP то надо инициализировать чем то окромя NULL-а, прежде чем прибавлять к нему что то.


Col2Row   (2009-12-26 12:49:00) [13]

Возвращается почему-то null, псевдокод:


create or alter procedure  ()
returns (
   RESULT char(50))
as
declare variable DIVIDER char(1);
declare variable VALUES char(2);
declare variable TEMP char(50);
begin
 DIVIDER = "\";
 for select VALUE
     from TABLE
     into :VALUES
 do
 TEMP = TEMP || :DIVIDER || :VALUES;
 RESULT = TEMP;
 suspend;
end


Если написать так: "TEMP = :DIVIDER || :VALUES;", то возвращается разделитель + одно значение. Если suspend перенести в блок do - то возвращается столбец - разделитель + все значения поля. То есть - не работает TEMP = TEMP. Что-то я делаю не так, что - не знаю, а пример найти не могу.


Sergey13   (2009-12-26 12:00:00) [14]

> [5] Col2Row   (26.12.09 11:35)

Ну так в цикле в процедуре читай да склеивай.


Col2Row   (2009-12-26 11:35:00) [15]

>А почему не в клиенте? ИМХО самое простое.

Результат на сервере нужен. Это - подзапрос.

>LIST - стандартная для 2 функция

Посмотрел. Слишком специфичная функция - только FB 2.1 и выше. У нас много FB 2.0.4.


Виталий Панасенко(дом)   (2009-12-26 10:13:00) [16]

LIST - стандартная для 2 функция


Sergey13   (2009-12-26 08:16:00) [17]

> Как запросом или процедурой

А почему не в клиенте? ИМХО самое простое.


Col2Row   (2009-12-25 23:34:00) [18]

Спасибо. Для Firebird'а бы...


12   (2009-12-25 23:25:00) [19]

mssql 2000
select top 10 product from product
declare @p varchar(255)
set @p=''
select top 10 @p=@p+convert(varchar(10),product)+';' from product
select @p


Наверх

Титульная страница Поиск, карта сайта Написать письмо