powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как преобразовать столбец в строку?
13 сообщений из 13, страница 1 из 1
Как преобразовать столбец в строку?
    #32225543
Подскажите, пожалуйста!!!

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

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


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

Мне кажется, что уместным было бы использование хранимых процедур совместно с курсорами... Но мои познания IB не настолько хороши, чтобы решить эту задачку самостоятельно. Поэтому я прошу помощи!!!
...
Рейтинг: 0 / 0
Как преобразовать столбец в строку?
    #32225545
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем?
это не праздный вопрос. мне кажется что задачу, которую ты хочешь решить таким образом, можно решить более простым и эффективным способом.
...
Рейтинг: 0 / 0
Как преобразовать столбец в строку?
    #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
Как преобразовать столбец в строку?
    #32225752
2alex_k:
Хочу, чтобы для каждой записи из первой таблицы связки многие-ко-многим, у пользователя отображалось одной строкой, а не несколькими.

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

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

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

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

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

если ты точно уверен, что у тебя будет _не больше_ 20(например) столбцов при любом раскладе, то написать хранимку, которая будет возвращать двать полей с данными и одно поле с количеством действительных полей.
...
Рейтинг: 0 / 0
Как преобразовать столбец в строку?
    #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
Как преобразовать столбец в строку?
    #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
Как преобразовать столбец в строку?
    #32226409
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо я что-то не понял либо:
1. Связь многие ко многим есть неправильность при нормализации ER-диаграммы до 3 НФ.
2. Ессно этого надо избежать (стандартно припомощи вспомогательной таблицы)
3. Вот когда ты так сделаешь то без труда получишь любые выборки какие хочешь при помощи простого SELECT'а...
...
Рейтинг: 0 / 0
Как преобразовать столбец в строку?
    #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
Как преобразовать столбец в строку?
    #32226615
Как можно это сделать?
...
Рейтинг: 0 / 0
Как преобразовать столбец в строку?
    #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
Как преобразовать столбец в строку?
    #32228076
С_П_А_С_И_Б_О О_Г_Р_О_М_Н_О_Е_!_!_!_!
Все работает! Нет предела моим благодарностям!!!!!!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как преобразовать столбец в строку?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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