powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / задвоить строку
21 сообщений из 21, страница 1 из 1
задвоить строку
    #39635392
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, скажите можно задвоить строку?
например есть

название кол-во
карандаш 2

нужно сделать

название кол-во
карандаш 1
карандаш 1
...
Рейтинг: 0 / 0
задвоить строку
    #39635415
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbom,
навскидку
Код: plsql
1.
2.
3.
4.
5.
with q(name,cnt) as (select 'Карандаш', 5 from dual union all
select 'Фломастер', 3 from dual)
, w(nam, cn) as (select name, cnt from q union all
select nam, cn-1 from w where w.cn > 1)
select nam, 1, cn from w


Но это колхоз.
...
Рейтинг: 0 / 0
задвоить строку
    #39635430
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbomДобрый день, скажите можно задвоить строку?
например есть

Код: plsql
1.
2.
название       кол-во
карандаш           2


нужно сделать

Код: plsql
1.
2.
3.
название       кол-во
карандаш           1
карандаш           1



8252860
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t(name,cnt) as (
select 'name1',3 from dual union all
select 'name2',2 from dual
)
select name, 1  from t 
connect by name = prior  name
and level <= cnt
and prior dbms_random.value is not null;
;
name1	1
name1	1
name1	1
name2	1
name2	1
...
Рейтинг: 0 / 0
задвоить строку
    #39635436
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bombimbom,

А версия какая?
...
Рейтинг: 0 / 0
задвоить строку
    #39635438
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

11
...
Рейтинг: 0 / 0
задвоить строку
    #39635443
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with t(name,cnt) as (
select 'name1',3 from dual union all
select 'name1',4 from dual union all
select 'name2',2 from dual
)
, t_unpvt(id, name, cnt_left, cnt) as (select rownum id, name, cnt, cnt from t
union all select id, name, cnt_left-1, cnt from t_unpvt where cnt_left > 1
)
select id, name, cnt_left||' of '||cnt from t_unpvt
order by id, name, cnt_left;

        ID NAME  CNT_LEFT||'OF'||CNT
---------- ----- --------------------------------------------------------------------------------
         1 name1 1 of 3
         1 name1 2 of 3
         1 name1 3 of 3
         2 name1 1 of 4
         2 name1 2 of 4
         2 name1 3 of 4
         2 name1 4 of 4
         3 name2 1 of 2
         3 name2 2 of 2
9 rows selected
...
Рейтинг: 0 / 0
задвоить строку
    #39635814
bombimbom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем большое!
...
Рейтинг: 0 / 0
задвоить строку
    #39636067
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Побалуемся с XQUERY:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t(name,cnt) as (
select 'name1',3 from dual union all
select 'name1',4 from dual union all
select 'name2',2 from dual
)
select  name,
        column_value || ' of ' || cnt cnt
  from  t,
        xmltable(
                 'for $i in 1 to xs:integer($c)
                    return $i'
                 passing cnt as "c"
                )
/

NAME  CNT
----- ----------
name1 1 of 3
name1 2 of 3
name1 3 of 3
name1 1 of 4
name1 2 of 4
name1 3 of 4
name1 4 of 4
name2 1 of 2
name2 2 of 2

9 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
задвоить строку
    #39636109
sergix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @table table (s varchar(10),i int)
insert into @table
select 'zzzz' s,5 i
union all 
select 'zz' s,3 i


--Вверху тупо подготовлена таблица
select t.*
from @table t
left join (select ROW_NUMBER()  over(order by id) [row] from docs) d on d.row<=t.i
--Таблица док, это самая здоровенная таблица, которая есть в вашей базе, если в ней хороший не прерывающийся identity, можно заюзать его вместо роу нумбера
...
Рейтинг: 0 / 0
задвоить строку
    #39636114
sergix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergix,

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

zzzz 5
zzzz 5
zzzz 5
zzzz 5
zzzz 5
zz 3
zz 3
zz 3
...
Рейтинг: 0 / 0
задвоить строку
    #39636116
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergix
Код: plsql
1.
declare @table table (s varchar(10),i int)



А ты часом не заблудился?

SY.
...
Рейтинг: 0 / 0
задвоить строку
    #39636147
sergix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYsergix
Код: plsql
1.
declare @table table (s varchar(10),i int)



А ты часом не заблудился?

SY.
а разница есть как тестовые данные задекларить?
Пусть будет вообще так.
Код: sql
1.
2.
3.
4.
5.
6.
7.
select t.s,1
from (
select 'карандаш' s,5 i
union all 
select 'линейка' s,3 i
) t
left join (select ROW_NUMBER()  over(order by id) [row] from docs) d on d.row<=t.i
...
Рейтинг: 0 / 0
задвоить строку
    #39636165
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergixПусть будет вообще так.


Да бред твое решение. Допилим до ORACLE'овского синтаксиса и имеем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select t.s,1
from (
select 'pencil' s,5 i from dual
union all
select 'ruler' s,3 i from dual
) t
left join (select ROW_NUMBER()  over(order by id) rn from t) d on d.rn<=t.i
/

S               1
------ ----------
pencil          1
pencil          1
ruler           1
ruler           1

SQL> 



И где 5 карандашей? Mедитируй над сколько строк вернет select ROW_NUMBER() over(order by id) rn from t и есть ли какя-либо связь между числом строк в таблице и числом размножения строки.

SY.
...
Рейтинг: 0 / 0
задвоить строку
    #39636185
sergix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYsergixПусть будет вообще так.


Да бред твое решение. Допилим до ORACLE'овского синтаксиса и имеем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select t.s,1
from (
select 'pencil' s,5 i from dual
union all
select 'ruler' s,3 i from dual
) t
left join (select ROW_NUMBER()  over(order by id) rn from t) d on d.rn<=t.i
/

S               1
------ ----------
pencil          1
pencil          1
ruler           1
ruler           1

SQL> 



И где 5 карандашей? Mедитируй над сколько строк вернет select ROW_NUMBER() over(order by id) rn from t и есть ли какя-либо связь между числом строк в таблице и числом размножения строки.

SY.

Сорян, я правда заблудился, думал это сиквел обычный :)


Не знаю почему на оракле не заработало. Связь такая -> мы соединяемся к записям большой таблицы по условию что записей меньше чем это поле, что нам нужно. Получается как раз нужное размножение :)
...
Рейтинг: 0 / 0
задвоить строку
    #39636192
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYДа бред твое решение.
Соломон, коллега из MSSQL предлагает соединяться с "самой большой таблицей в системе", сам соединяется с doc, которая у него имеет более миллиона [ух ты!] записей :)

Коллеге из MSSQL: решение старое как экскременты мамонта и не менее известное.
Но не самое эффективное и не самое удобное - по крайней мере, в oracle.
Заканчивайте эту тему, все уже показано - за исключением, разве что, вариантов на конвейерных/табличных функциях и модельки
...
Рейтинг: 0 / 0
задвоить строку
    #39636223
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНо не самое эффективноеКак там с проталкиванием условия джоина на row_number по "большой таблице"? Как там с блокировкой изменений другими сессиями?
...
Рейтинг: 0 / 0
задвоить строку
    #39636224
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousНо не самое эффективноеКак там с проталкиванием условия джоина на row_number по "большой таблице"? Как там с блокировкой изменений другими сессиями?
Это мне вопрос? ;)
...
Рейтинг: 0 / 0
задвоить строку
    #39636229
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aa, теперь понятно что есть DOC. Т.e. нумеруем лимон строк для 5ти карандашей.

SY.
...
Рейтинг: 0 / 0
задвоить строку
    #39636237
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЗаканчивайте эту тему, все уже показано - за исключением, разве что, вариантов на конвейерных/табличных функциях и модельки
+ латерал (с таблицей dok)

....
stax
...
Рейтинг: 0 / 0
задвоить строку
    #39636604
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax+ латерал (с таблицей dok)Не подходит, я уже спрашивал
...
Рейтинг: 0 / 0
задвоить строку
    #39636637
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadStax+ латерал (с таблицей dok)Не подходит, я уже спрашивал
тогда уж table c наворотом

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


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