|
|
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
Никто не сталкивался с проблеммой кросс таблицы, и есть ли в Оракле стандартные средства для этого??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 07:28:56 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
1) Сталкивались. 2) Нет. Хотя никто не мешает написать пакет :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 08:58:59 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
Для тех, кто в танке, скажите, что это такое (или где читать)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 09:29:24 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
to Ося наглядный пример - сводные отчёты(таблицы) в екселе например: есть 3 столбца: инвестор, ценные бумаги и количество нужно построить сводный отчёт : Код: plaintext 1. 2. 3. и + итоги по столбцам и строкам. Примерно так это выглядит на практике, и к сожалению, стандартных средств, позволяющих одним движением получить данную информацию в таком виде в самом оракле не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 09:45:58 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
не найдеться небольшого примера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 09:56:50 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
Oracle Reports спокойно делает это. Называется матричный отчет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 10:23:48 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
2 Divan А что за проблема, и почему её нельзя решить через decode/case? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 10:39:21 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
проблема в том что существует таблица, и нужно ее развернуть для отчета. Oracle Report не имею. а насчет decode и case, не понимаю как эти функции тут пригодяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 11:19:03 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
"Стандартного" способа развернуть запрос в кросс-таблицу нет. Есть самостоятельные решения, наподобе: http://www.sql.ru/forum/actualtopics.aspx?search=p_anchor.count&submit=%CD%E0%E9%F2%E8&bid=3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 11:32:36 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
стыдно конечно признаться, но я нифига из того кода не понял. Кто нибудь реально применял это, и как???? Ка мне в итоге получить развернутую таблицу??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 09:07:55 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
использование данного пакета мне совершенно не понятно, не могу уловить смысл. Кто может, проясните мне безграмотному. вот это вот что такое variable x refcursor а вот этот запрос что делает, и в чем смысл этого select deptno, job, ename, sal, row_number() over (partition by deptno, job order by sal, ename ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 09:18:28 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
2 Divan Смотри http://asktom.oracle.com/pls/ask/f?p=4950:17:252110104072509101::NO:::#tag419593546543 Эта техника используется во второй ветке, на которую тебе дал ссылку Denis Popov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 10:13:06 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
Нет, это не то.... там все жестко прописываеться, а мне необходима универсальная функция. Сдаеться что мне придется ее самому написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 11:58:47 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
ну что, никто не подскажет что такое variable x refcursor; ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 13:01:38 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
Придется Вам прочитать руководство по PL/SQL. Там есть ответ на то, что такое ref cursor. А в SQL*Plus можно создать хост-переменную с этом типом, только тип пишется в одно слово. Значит, еще и руководство по SQL*Plus подойдет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 13:49:21 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
да, это я уже нашел. теперь не могу понять, как мне данные оттуда выплеснуть в какую либо таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 14:16:32 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
ну вот, процедура конечно коряво написана. Честно сказать я ее по моему на этом форумен нашел, только на 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2003, 11:53:38 |
|
||
|
Кросс таблицы
|
|||
|---|---|---|---|
|
#18+
прошу прощения еще раз за назойливость, но вот окончательный вариант, гораздо более универсальный едиснтвенное ограничение, в качестве наименование колонок используеться значения для разворота, поэтому в них не должны быть пробелы. Можно конечно написать функцию для замены пробелов, но тут кому как... 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; что не понятно, обращайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2003, 10:41:23 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2767&tid=1990111]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
302ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 596ms |

| 0 / 0 |
