-
Есть таблица, с некоторым полем:
Field1
В таблице 4 записи с 4-мя значениями поля Field1:
Value1
Value2
Value3
Value4
Нужно запросом или процедурой получить такую строчку:
Value1\Value2\Value3\Value4
-
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
-
Спасибо. Для Firebird'а бы...
-
> Как запросом или процедурой
А почему не в клиенте? ИМХО самое простое.
-
LIST - стандартная для 2 функция
-
>А почему не в клиенте? ИМХО самое простое.
Результат на сервере нужен. Это - подзапрос.
>LIST - стандартная для 2 функция
Посмотрел. Слишком специфичная функция - только FB 2.1 и выше. У нас много FB 2.0.4.
-
> [5] Col2Row (26.12.09 11:35)
Ну так в цикле в процедуре читай да склеивай.
-
Возвращается почему-то 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. Что-то я делаю не так, что - не знаю, а пример найти не могу.
-
> [7] Col2Row (26.12.09 12:49)
ну так TEMP то надо инициализировать чем то окромя NULL-а, прежде чем прибавлять к нему что то.
-
Спасибо, уже немного продвинулись :)
Добавил TEMP = ""; пишет - numeric overflow or string iruncaction.
Пишет даже на "TEMP = TEMP || :MODALITY_DIVIDER". То есть - не может сложить две переменные.
-
Сорри, на TEMP = TEMP || :DIVIDER, кусок кода пролез :)
-
> [9] Col2Row (26.12.09 13:10)
> Добавил TEMP = "
Ну добавь "бла-бла". Вернет нужное с "бла-бла"?
-
>Ну добавь "бла-бла". Вернет нужное с "бла-бла"?
Всё дало :) Сам додумался: TEMP = Trim(TEMP). Всем спасибо.
-
Поменял переменные на VARCHAR. Trim не нужен.
-
Как бы еще последнюю '\' убрать :) Попробовал в основном запросе - работает почти идеально :) Только в конце оставляет лишнее '\'.
-
if length(s) > 0 then setlength(s,length(s)-1)
-
> if length(s) > 0 then setlength(s,length(s)-1)
FB уже паскаль код поддерживает? круто!
-
нет конечно
очень болит голова
ну вы поняли смысл
-
>ну вы поняли смысл
Смысл я как бы знал :) Вот только как это на sql выразить...
-
>Col2Row (27.12.09 23:47) [18]
доку принципиально не читаем?
ibase.ru: substring
а коли уж делаете на psql, то кто мешает не дописывать разделитель после последней строки?