Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как преобразовать столбец в строку? / 13 сообщений из 13, страница 1 из 1
02.08.2003, 04:02
    #32225543
Как преобразовать столбец в строку?
Подскажите, пожалуйста!!!

Допустим, имеется запрос, который состоит всего из одного столбца , а количество записей >1. Как можно привести все эти записи к одной строке (строковой переменной), с пробелами, в качестве разделителей. Данные типа varchar.

Пусть SELECT-запрос выдает таблицу:
aaa
bbb
ccc
ddd


Из нее необходимо получить строку:
"aaa bbb ccc ddd" (естественно, без кавычек)

Мне кажется, что уместным было бы использование хранимых процедур совместно с курсорами... Но мои познания IB не настолько хороши, чтобы решить эту задачку самостоятельно. Поэтому я прошу помощи!!!
...
Рейтинг: 0 / 0
02.08.2003, 06:08
    #32225545
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как преобразовать столбец в строку?
а зачем?
это не праздный вопрос. мне кажется что задачу, которую ты хочешь решить таким образом, можно решить более простым и эффективным способом.
...
Рейтинг: 0 / 0
02.08.2003, 10:55
    #32225556
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как преобразовать столбец в строку?
Попробуй так

create procedure Proc
returns (s varchar(300))
as
declare variable a varchar(50);
begin
s = '';
for select a from t into :a
do
begin
s = s||' '||a;
end
suspend;
end
...
Рейтинг: 0 / 0
03.08.2003, 01:45
    #32225752
Как преобразовать столбец в строку?
2alex_k:
Хочу, чтобы для каждой записи из первой таблицы связки многие-ко-многим, у пользователя отображалось одной строкой, а не несколькими.

Другими словами, например имеем:
Саша <-> Люда
Саша <-> Вера
Паша <-> Наташа
Паша <-> Вера
Алекс <-> Люда
Алекс <-> Наташа
Алекс <-> Вера
(это связи между записями первой и второй таблиц)

Хочу, чтобы пользователь видел примерно так:
Саша, Люда Вера
Паша, Наташа Вера
Алекс, Люда Наташа Вера
(запятая разделяет поля)

2vovan1:
Спасибо!
...
Рейтинг: 0 / 0
03.08.2003, 02:17
    #32225758
Как преобразовать столбец в строку?
2vovan1:
А как я могу вставить вызов этой процедуры в select-запрос?
(зачем - см. выше)
...
Рейтинг: 0 / 0
03.08.2003, 05:38
    #32225771
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как преобразовать столбец в строку?
это _не то что тебе нужно_
тебе нужно, чтобы твой селект возвращал набор данных с произвольным количеством столбцов. я правильно тебя понял?

то что посоветовал Вован, поможет тебе на половину, но другого полного решения нет.
select * from proc

выдаст тебе один столбец. а на клиенте ты должен его сам распарсить по пробелам и отобразить на экране как несколько столбцов. при этом если в имени будет пробел, возникнет глюк с лишним столбцом :-)

если ты точно уверен, что у тебя будет _не больше_ 20(например) столбцов при любом раскладе, то написать хранимку, которая будет возвращать двать полей с данными и одно поле с количеством действительных полей.
...
Рейтинг: 0 / 0
03.08.2003, 19:07
    #32225870
Как преобразовать столбец в строку?
То, что мне нужно:

Допустим имеется ТРИ таблицы такого содержания:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Таблица FIRST
FIRST_ID   FIRST_NAME
   1           Саша
   2           Паша
   3           Алекс

Таблица SECOND
SECOND_ID   SECOND_NAME
   1            Люда
   2            Наташа
   3            Вера

Таблица LINKFIRSTSECOND
LINK_FIRST   LINK_SECOND
   1              1 
   1              3 
   2              2 
   2              3 
   3              1 
   3              2 
   3              3 
(служит для связи первой и второй таблиц)


Смысл примера я думаю понятен всем, объяснять не надо :-)

Я хочу получить информацию о связях
SELECT FIRST_NAME, SECOND_NAME FROM.....

но именно чтобы в ТАКОМ виде:

Код: plaintext
1.
2.
3.
FIRST_NAME   SECOND_NAME
  Саша         Люда Вера
  Паша         Наташа Вера
  Алекс        Люда Наташа Вера


Результат состоит из ДВУХ столбцов. В правом столбце ВСЯ необходимая информация собирается через символ пробела.
...
Рейтинг: 0 / 0
03.08.2003, 19:17
    #32225875
Как преобразовать столбец в строку?
2vovan1:
Я наверное ужасный тормоз, но у меня выскакивает ошибка:
The cursor identified in the update or delete statement is not positioned on a row. no current record for fetch operation.
...
Рейтинг: 0 / 0
04.08.2003, 14:17
    #32226409
Евгений, Екатеринбург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как преобразовать столбец в строку?
Либо я что-то не понял либо:
1. Связь многие ко многим есть неправильность при нормализации ER-диаграммы до 3 НФ.
2. Ессно этого надо избежать (стандартно припомощи вспомогательной таблицы)
3. Вот когда ты так сделаешь то без труда получишь любые выборки какие хочешь при помощи простого SELECT'а...
...
Рейтинг: 0 / 0
04.08.2003, 15:34
    #32226533
Как преобразовать столбец в строку?
1 и 2 .
Связь многие-ко-многим реализована посредством таблицы LINKFIRSTSECOND.

3 .
Если использовать запрос
Код: plaintext
1.
2.
3.
4.
SELECT FIRST_NAME, SECOND_NAME
FROM FIRST, SECOND, LINKFIRSTSECOND
WHERE (FIRST_ID = LINK_FIRST)
and (SECOND_ID = LINK_SECOND);

то получится столько строк, сколько существует связок. Мне же необходимо "сгруппировать" результат запроса особым образом ( см. постинг выше ), чтобы каждая строка отражала ОДНУ запись из таблицы FIRST, а все связные значения из таблицы SECOND писались во втором столбце запроса, разделенные пробелом (сколько бы их ни было!).
...
Рейтинг: 0 / 0
04.08.2003, 16:19
    #32226615
Как преобразовать столбец в строку?
Как можно это сделать?
...
Рейтинг: 0 / 0
04.08.2003, 16:46
    #32226666
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как преобразовать столбец в строку?
Вот так - при помощи Хранимой процедуры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE NEW_PROCEDURE 
RETURNS (
    NAME VARCHAR( 10 ),
    OUT VARCHAR( 256 ))
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE SNAME VARCHAR( 10 );
BEGIN

  FOR SELECT FIRST_NAME, FIRST_ID FROM  "FIRST"  INTO :NAME,:ID DO BEGIN
    OUT = '';
    FOR SELECT SECOND_NAME FROM  "SECOND" , LINKFIRSTSECOND WHERE LINK_FIRST = :ID AND SECOND_ID = LINK_SECOND INTO :SNAME DO
        OUT = OUT || ' ' || SNAME;
    SUSPEND;
  END
END
...
Рейтинг: 0 / 0
05.08.2003, 23:23
    #32228076
Как преобразовать столбец в строку?
С_П_А_С_И_Б_О О_Г_Р_О_М_Н_О_Е_!_!_!_!
Все работает! Нет предела моим благодарностям!!!!!!!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как преобразовать столбец в строку? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]