Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как такое провернуть?  [new]
nansy111
Guest
Добрый день!
У меня есть данные следующего вида
cod name
11001100
a
11101110
b


Нужно преобразовать к такому виду
cod name
1100a
1110b

Подскажите, пожалуйста, как это сделать!
15 июн 09, 17:01    [7301374]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
nansy111,

пока нет известного условия для сортировки (строка с 'a' идёт за строкой с '1100', патамушта ...) либо сопоставления строк (строке с name=1100 соответствует строка с 'a', патамушта ...) - никак.
15 июн 09, 17:15    [7301480]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
suPPLer, а можно сказать, что 1 строке соответствует следующая строка, где cod is null?
15 июн 09, 17:29    [7301582]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
nansy111
suPPLer, а можно сказать, что 1 строке соответствует следующая строка, где cod is null?

Как мы определяем первую строку, следующую, третью - по какому условию сортируем?
15 июн 09, 17:44    [7301675]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
эх... неужели вручную делать?=(
15 июн 09, 17:50    [7301727]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
nansy111,
Ещё раз. Вот у нас есть данные:
select 1100 cod, '1100' name from dual union all
select 1110 cod, '1110' name from dual union all
select null cod, 'a' name from dual union all
select null cod, 'b' name from dual

Как нам их выстроить в нужном порядке или понять, что строке с name='a' соответствует строка с name = '1100'? Это мы ещё пока не говорим про случай, когда у нас нет нужных строк, например, с пустым cod...

Вот покажите, как Вы получаете эти данные, запросом.
15 июн 09, 17:58    [7301810]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
work-sa
Member

Откуда: Сухум
Сообщений: 263
nansy111, Вас спросили - можете ли Вы гарантировать (за счет сортировки по другим полям), что строки будут выведеты так:
1100 1100
        a
1100 1100
        b
а не так:
1100 1100
1100 1100
        a
        b
15 июн 09, 17:58    [7301813]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
work-sa,
да, если сортировать по rowid, будет то, что надо
1100 1100
a
1100 1100
b
15 июн 09, 18:04    [7301860]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
Elic
Member

Откуда:
Сообщений: 29990
nansy111
да, если сортировать по rowid, будет то, что надо
Наивная
15 июн 09, 18:09    [7301908]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
nansy111,

Ещё раз: покажите, как Вы получаете эти данные, запросом. Пожалуйста. А дальше уже будет видно: можно сделать, нельзя...
15 июн 09, 18:11    [7301926]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
suPPLer, select *from table1 order by rowid
15 июн 09, 18:27    [7302015]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
Elic
Member

Откуда:
Сообщений: 29990
nansy111
order by rowid
Всё ешё не доходит, что это почти случайно?
15 июн 09, 18:36    [7302060]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
Elic,
здесь так принято - всем грубить? Какая разница случайно или нет? строки загружались именно в таком порядке и при сортировке по rowid все 1000 строк расположены как надо.
15 июн 09, 18:41    [7302073]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
Elic
Member

Откуда:
Сообщений: 29990
nansy111
строки загружались именно в таком порядке и при сортировке по rowid все 1000 строк расположены как надо.
Когда жизнь ударит тебя по темечку, "грубость" таковой перестанет казаться.
15 июн 09, 18:51    [7302104]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
nansy111,

0. Расположены они там в нужном порядке, пока их не тронут , что не придаёт уверенности в завтрашнем дне...
1. ... но если это временный запрос, а не надолго, то:
select cod, name 
  from (select lag(cod, 1) over(order by r) cod, name 
          from (select rowid r, t.* from table1 t)) 
 where cod is not null;
2. Тем не менее, не используйте rowid для сортировки в подобных случаях:
автор
If you delete and reinsert a row with the Import and Export utilities, for example, then its rowid may change. If you delete a row, then Oracle may reassign its rowid to a new row inserted later.


Лучше сделайте другую таблицу:
create table table2 as select row_number() over(order by rowid) order_num, cod, name from table1;
и пользуйтесь ей.
15 июн 09, 19:02    [7302132]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
nansy111,

Elic Вам не грубит, а очень мягко пытается подвести к мысли, что соответствие rowid <-> строка недетерминированно. Если Вы поинтересуетесь, то вам здесь нарисуют как минимум больше одного примера, где эта недетерминированность очевидна. Еще одна мысль к которой Вас мягко пытался подвести Elic - это небольшой парадокс - при отображении результатов выборки на странице результаты естественно упорядочены, в реальной таблице данные неупорядочены - поэтому тот порядок, который кажется очевидным - на самом деле неочевиден и для создания этой упорядоченности необходимы некоторые телодвижения.
Возможно, в Вашем конкретном данные упорядоченные в порядке rowid действительно соответствуют упорядоченности которую Вы ожидаете, но никто здесь не знает об этих Ваших частных условиях, никто здесь не знает насколько долго это соответствие продержится и никто здесь не будет предлагать решение которое будет работать чисто случайно.

Best regards

Maxim
15 июн 09, 19:06    [7302142]     Ответить | Цитировать Сообщить модератору
 Re: как такое провернуть?  [new]
nansy111
Guest
suPPLer,огромное спасибо за помощь! это таблица временная. Используя ваш запрос, я приведу данные в нужный вид и обновлю ими другую. Поэтому сортировки по rowid вполне достаточно
16 июн 09, 10:38    [7303573]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить