Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создать временную таблицу с переменным количеством столбцов / 9 сообщений из 9, страница 1 из 1
27.03.2009, 11:22
    #35895875
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
ASE 15
Дана таблица, с 1 столбцом и 3 строками. Нужно сделать временную таблицу, где
значения полей - названия колонок.
Пример.
Дано: таблица названий колонок для создаваемой временной таблицы.
Нужно создать временную таблицу с именами столбцов из первой таблицы одного типа (int на пример).

#Table1
p01
p02
p03

#Table2 p01 p02 p03

Какие решения для этого можно применить ?
...
Рейтинг: 0 / 0
27.03.2009, 11:30
    #35895905
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
JenyaD wrote:

> Дано: таблица названий колонок для создаваемой временной таблицы.
> Нужно создать временную таблицу с именами столбцов из первой таблицы
> одного типа (int на пример).

> Какие решения для этого можно применить ?

Никакие. Таблиц с переменным числом колонок не бывает.
Если вам это надо, вы что-то сильно не так делаете.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 11:55
    #35896004
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
Ситуация примерно такая :
Я в пользовательском интерфейсе выбираю для отчёта показатели
и добавляю их во временную таблицу как строки.

Процедура для построения отчёта(которая возвращает resultset) должна уже вернуть эти показатели как столбцы отчёта.
...
Рейтинг: 0 / 0
27.03.2009, 12:57
    #35896257
Apucmokpam
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
JenyaD, курсор + динамический запрос 'create table ...' не помогает? У нас 12.5, временная таблица не создается, а постоянная создается. Можно впринципе сделать и постоянную с названием типа 'ххх'+convert(varchar(5),@@spid), а потом не забыть её удалить.

MasterZiv
Никакие. Таблиц с переменным числом колонок не бывает.

Я так понимаю, имеется в виду таблица с заранее не известной структурой. Что сделать все же можно(правда временную не получилось), хотя и непонятно зачем.
...
Рейтинг: 0 / 0
27.03.2009, 14:38
    #35896645
v_smirnov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
Не знаю как под ASE, а вот под ASA решение вот такое.

Есть несколько вариантов:
1.

Вариант с созданием удалением таблицы отчета. (работает один такой отчет, но мне не нравится такое решение!)

Процедура создает таблицу global temporary с именем 'tmp_report'||connection_id и заполняет ее.
После этого она передает клиенту имя этой таблицы.
Далее дело клиента как он это прочитает и обработает.
(для упрощения обработки у нас есть дополнительная таблица в которой содержится информация о полях - тип, порядок, имя, русское имя)

2. Формировать процедурой xml с результатами и отдавать его клиенту.
отдавать можно и через таблицу ;) и напрямую.

3. Если возможных полей не будет больше 255 то проще создать таблицу содержащую их все. заполнять процедурой только нужные а клиенту отдавать список что он должен показать и в каком порядке.

п.1 и п3 рабочие ;)

Может еще есть решения, да только никак не собраться и не найти их ;( все времени нет "на переделать то что работает"

Кстати - процедура запоминает свойства result set (который она возвращает) еще на этапе ее компилирования. Мне не удалось заставить ее забыть его...
...
Рейтинг: 0 / 0
27.03.2009, 14:46
    #35896672
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
JenyaD пишет:

> Процедура для построения отчёта(которая возвращает resultset) должна уже
> вернуть эти показатели как столбцы отчёта.
Cross-Report делайте на клиенте.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 14:48
    #35896680
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
Apucmokpam пишет:

> Что сделать все же можно(правда временную не получилось), хотя и
> непонятно зачем.

Ну можно, сделать запрос и выполнить его динамически,
или колонки в цикле по alter table добавлять, но лучше в консерватории
всё же сразу поправить.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 15:06
    #35896736
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
Пока самый лучший вариант перенести создание временной таблицы из процедуры в среду разработки.
Тогда уж процедура всё будет знать и сделает как надо :). Про alter table я тоже думал, однако это не очень красивое решение.
MasterZiv Cross-Report
Можно немного поподробнее ??
...
Рейтинг: 0 / 0
27.03.2009, 18:37
    #35897316
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать временную таблицу с переменным количеством столбцов
JenyaDMasterZiv Cross-Report
Можно немного поподробнее ??Какой клиент используете? Если что-нибудь из Sybase (Infomaker/PowerBuilder) то это будет Cross Report. В Crystal Report тоже самое называется Crosstab.
В Excel то же самое - PivotTable.
Исходные данные в формате, ну например: Code1, Code2, SomeNumber. Клиент посредством кросс-отчета превратит это в табличку в которой Code1 будет идти сверху-вниз (будет изображать первичный ключ), а Code2 превратиться в колонки. А в полях будет SomeNumber сгруппированный какой-то агрегатной функцией.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создать временную таблицу с переменным количеством столбцов / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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