Oracle & Column compress

Papazyan

Подскажите, плиз, как в Oracle наиболее естественным путем можно данные из одного столбца за enumerate'ить и получить в результате из таблицы типа (symbol,...) две таблицы (id, symbol) и (id,....). Но базовую таблицу трогать нельзя. Нужно что бы не гонять по сети мегабайты. Поля большие, но уникальных значений не более 1% от всех записей. Прав в БД очень мало.

KViH

creat table enumerated_table as select rownum id, symbol symbol from source_table

mbolik1

SELECT t2.id, t1....
FROM
table t1
select rownum id, symbol from (select distinct symbol from table order by symbol asc t2
WHERE
t1.symbol = t2.symbol
Ты это имел ввиду?

Papazyan

Ты это имел ввиду?
Думаю, да, спасибо.

Papazyan

В качестве дополнения:
1) rownum нельзя использовать на временных таблицах с order by, group by. Можно использовать rank.
2) NULL криво обрабатывается при такой схеме. Можно использовать NVL, но это вызывает по непонятной причине немерянные тормоза, либо можно добавить остаток с помощью UNION с соответствующим select.

mbolik1

Если есть NULL то так:
SELECT nvl(t2.id,0 t1....
FROM
table t1
select rownum id, symbol from (select distinct symbol from table order by symbol asc t2
WHERE
t1.symbol = t2.symbol(+)
Это должно быть довольно быстро.

sinet

rank или dense_rank порулят скорее всего в этой задаче соединение.
Оставить комментарий
Имя или ник:
Комментарий: