powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Кросс таблицы
18 сообщений из 18, страница 1 из 1
Кросс таблицы
    #32174703
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не сталкивался с проблеммой кросс таблицы, и есть ли в Оракле стандартные средства для этого???
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174733
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Сталкивались.
2) Нет. Хотя никто не мешает написать пакет :-)
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174760
Фотография Ося
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех, кто в танке, скажите, что это такое (или где читать)?
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174776
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Ося
наглядный пример - сводные отчёты(таблицы) в екселе
например: есть 3 столбца: инвестор, ценные бумаги и количество
нужно построить сводный отчёт :
Код: plaintext
1.
2.
3.
                 бумага1 бумага2 .... бумагаN
инвестор1   кол       кол        ...  кол
...
инвесторM  кол        кол       ...  кол

и + итоги по столбцам и строкам.
Примерно так это выглядит на практике, и к сожалению, стандартных средств, позволяющих одним движением получить данную информацию в таком виде в самом оракле не существует.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174783
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не найдеться небольшого примера?
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174801
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle Reports спокойно делает это. Называется матричный отчет.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174820
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Divan
А что за проблема, и почему её нельзя решить через decode/case?
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174864
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема в том что существует таблица, и нужно ее развернуть для отчета.

Oracle Report не имею.

а насчет decode и case, не понимаю как эти функции тут пригодяться.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32174883
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Стандартного" способа развернуть запрос в кросс-таблицу нет. Есть самостоятельные решения, наподобе: http://www.sql.ru/forum/actualtopics.aspx?search=p_anchor.count&submit=%CD%E0%E9%F2%E8&bid=3
...
Рейтинг: 0 / 0
Кросс таблицы
    #32175823
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стыдно конечно признаться, но я нифига из того кода не понял.
Кто нибудь реально применял это, и как????
Ка мне в итоге получить развернутую таблицу???
...
Рейтинг: 0 / 0
Кросс таблицы
    #32175841
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использование данного пакета мне совершенно не понятно, не могу уловить смысл.
Кто может, проясните мне безграмотному.

вот это вот что такое
variable x refcursor

а вот этот запрос что делает, и в чем смысл этого
select deptno, job, ename, sal,
row_number() over (partition by deptno, job
order by sal, ename
???
...
Рейтинг: 0 / 0
Кросс таблицы
    #32175897
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Divan
Смотри

http://asktom.oracle.com/pls/ask/f?p=4950:17:252110104072509101::NO:::#tag419593546543

Эта техника используется во второй ветке, на которую тебе дал ссылку Denis Popov.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32176026
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, это не то....
там все жестко прописываеться, а мне необходима универсальная функция.
Сдаеться что мне придется ее самому написать.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32176147
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что, никто не подскажет что такое

variable x refcursor;

???
...
Рейтинг: 0 / 0
Кросс таблицы
    #32176240
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется Вам прочитать руководство по PL/SQL. Там есть ответ на то, что такое ref cursor. А в SQL*Plus можно создать хост-переменную с этом типом, только тип пишется в одно слово. Значит, еще и руководство по SQL*Plus подойдет...
...
Рейтинг: 0 / 0
Кросс таблицы
    #32176299
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, это я уже нашел.

теперь не могу понять, как мне данные оттуда выплеснуть в какую либо таблицу.
...
Рейтинг: 0 / 0
Кросс таблицы
    #32178236
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот, процедура конечно коряво написана.
Честно сказать я ее по моему на этом форумен нашел, только на Microsoft SQL, пришлось поизголяться в переводе.

1. как запускать
предоставить себе привелегию принудительно на создание таблицы

grant create table to твое имя;

а вот текст процедуры, но есть ограничение, то что будет использоваться в качестве столбца, должно быть в числовом выражении.
кто ее уничерсализирует, буду очень благодарен, а то я ж не девелопер.

create or replace procedure cross_table (
table_name in varchar2,
onrows in varchar2, --что использется в качестве строки
onrowsalias in varchar2, -- какой аллиас
oncols in varchar2, -- что в качестве столбца
symcol number --сумма на пересечении если 1 то суммируется количество)
is
sql_text varchar2(4000);
keysql varchar(1000);
key varchar2(1000);
name_col number;
begin
sql_text:='SELECT'||' '||onrows||' AS '||onrowsalias||' ';

keysql:= 'INSERT INTO TEMP_VIBOR_TABLE SELECT DISTINCT '||oncols||' FROM '||table_name;

execute immediate keysql;
select min(keyvalue) into key from TEMP_VIBOR_TABLE;
name_col:=0;
while key is not null
loop
name_col:=name_col+1;
keysql:=' SUM(CASE WHEN '||oncols||'='''||key||''' THEN CASE WHEN '||symcol||' is null then 1 else '||symcol||' end else 0 end) as Col_'||key;
sql_text:=sql_text||','||keysql;
select min(keyvalue) into key from TEMP_VIBOR_TABLE where keyvalue>key;
end loop;
sql_text:=sql_text||' FROM '||table_name||' GROUP BY '||onrows||' ORDER BY '||onrows;


execute immediate 'delete TEMP_VIBOR_TABLE';

sql_text:='CREATE TABLE CROSS_ITOG AS '||sql_text;


execute immediate sql_text;

-- подчистим таблицу

execute immediate 'delete TEMP_VIBOR_TABLE';

end cross_table;
...
Рейтинг: 0 / 0
Кросс таблицы
    #32178905
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения еще раз за назойливость, но вот окончательный вариант, гораздо более универсальный

едиснтвенное ограничение, в качестве наименование колонок используеться значения для разворота, поэтому в них не должны быть пробелы. Можно конечно написать функцию для замены пробелов, но тут кому как...

create or replace procedure cross_table (
table_name in varchar2, --исходная таблица
onrows in varchar2, --что использется в качестве строки
onrowsalias in varchar2, -- какой аллиас
oncols in varchar2, -- что в качестве столбца
symcol number --сумма на пересечении если 1 то суммируется количество)
sql_text varchar2(4000);
keysql varchar(1000);
key varchar2(1000);
name_col number;
TYPE type_col_cursor IS REF CURSOR;
cursor_col type_col_cursor;
begin


sql_text:='SELECT'||' '||onrows||' AS '||onrowsalias||' ';

name_col:=0;
open cursor_col FOR 'SELECT DISTINCT '||oncols||' FROM '||table_name;
loop
fetch cursor_col into key;
EXIT WHEN cursor_col%NOTFOUND;
name_col:=name_col+1;
keysql:=' SUM(CASE WHEN '||oncols||'='''||key||''' THEN CASE WHEN '||symcol||' is null then 1 else '||symcol||' end else 0 end) as '||key;
sql_text:=sql_text||','||keysql;
end loop;
sql_text:=sql_text||' FROM '||table_name||' GROUP BY '||onrows||' ORDER BY '||onrows;

execute immediate 'delete TEMP_VIBOR_TABLE';

sql_text:='CREATE TABLE CROSS_ITOG AS '||sql_text;

execute immediate sql_text;

-- подчистим таблицу
execute immediate 'delete TEMP_VIBOR_TABLE';

end cross_table;


что не понятно, обращайтесь.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Кросс таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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