Форум: "Базы";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
ВнизКак запросом или процедурой получить столбец в виде строки? Найти похожие ветки
← →
Col2Row (2009-12-25 22:25) [0]Есть таблица, с некоторым полем:
Field1
В таблице 4 записи с 4-мя значениями поля Field1:
Value1
Value2
Value3
Value4
Нужно запросом или процедурой получить такую строчку:
Value1\Value2\Value3\Value4
← →
12 © (2009-12-25 23:25) [1]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
← →
Col2Row (2009-12-25 23:34) [2]Спасибо. Для Firebird"а бы...
← →
Sergey13 © (2009-12-26 08:16) [3]> Как запросом или процедурой
А почему не в клиенте? ИМХО самое простое.
← →
Виталий Панасенко(дом) (2009-12-26 10:13) [4]LIST - стандартная для 2 функция
← →
Col2Row (2009-12-26 11:35) [5]>А почему не в клиенте? ИМХО самое простое.
Результат на сервере нужен. Это - подзапрос.
>LIST - стандартная для 2 функция
Посмотрел. Слишком специфичная функция - только FB 2.1 и выше. У нас много FB 2.0.4.
← →
Sergey13 © (2009-12-26 12:00) [6]> [5] Col2Row (26.12.09 11:35)
Ну так в цикле в процедуре читай да склеивай.
← →
Col2Row (2009-12-26 12:49) [7]Возвращается почему-то 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:56) [8]> [7] Col2Row (26.12.09 12:49)
ну так TEMP то надо инициализировать чем то окромя NULL-а, прежде чем прибавлять к нему что то.
← →
Col2Row (2009-12-26 13:10) [9]Спасибо, уже немного продвинулись :)
Добавил TEMP = ""; пишет - numeric overflow or string iruncaction.
Пишет даже на "TEMP = TEMP || :MODALITY_DIVIDER". То есть - не может сложить две переменные.
← →
Col2Row (2009-12-26 13:11) [10]Сорри, на TEMP = TEMP || :DIVIDER, кусок кода пролез :)
← →
Sergey13 © (2009-12-26 14:17) [11]> [9] Col2Row (26.12.09 13:10)
> Добавил TEMP = "
Ну добавь "бла-бла". Вернет нужное с "бла-бла"?
← →
Col2Row (2009-12-26 15:49) [12]>Ну добавь "бла-бла". Вернет нужное с "бла-бла"?
Всё дало :) Сам додумался: TEMP = Trim(TEMP). Всем спасибо.
← →
Col2Row (2009-12-26 15:51) [13]Поменял переменные на VARCHAR. Trim не нужен.
← →
Col2Row (2009-12-26 16:01) [14]Как бы еще последнюю "\" убрать :) Попробовал в основном запросе - работает почти идеально :) Только в конце оставляет лишнее "\".
← →
12 © (2009-12-27 11:23) [15]if length(s) > 0 then setlength(s,length(s)-1)
← →
sniknik © (2009-12-27 11:28) [16]> if length(s) > 0 then setlength(s,length(s)-1)
FB уже паскаль код поддерживает? круто!
← →
12 © (2009-12-27 12:26) [17]нет конечно
очень болит голова
ну вы поняли смысл
← →
Col2Row (2009-12-27 23:47) [18]>ну вы поняли смысл
Смысл я как бы знал :) Вот только как это на sql выразить...
← →
Кщд (2009-12-28 09:58) [19]>Col2Row (27.12.09 23:47) [18]
доку принципиально не читаем?
ibase.ru: substring
а коли уж делаете на psql, то кто мешает не дописывать разделитель после последней строки?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c