Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1302506523
DiamondShark
2011-04-11 11:22
2011.07.31
Modernization, innovation, vperde!


2-1303709793
prodex
2011-04-25 09:36
2011.07.31
Обращение к БД InterBase из разных потоков


15-1302640197
Юрий
2011-04-13 00:29
2011.07.31
С днем рождения ! 13 апреля 2011 среда


15-1302604376
БарЛог
2011-04-12 14:32
2011.07.31
Антиусилитель wi-fi сигнала


11-1236071712
rvi
2009-03-03 12:15
2011.07.31
Запись в log





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский