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

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

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

название кол-во
карандаш 1
карандаш 1
...
Рейтинг: 0 / 0
24.04.2018, 14:11
    #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
24.04.2018, 14:23
    #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
24.04.2018, 14:29
    #39635436
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задвоить строку
bombimbom,

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

11
...
Рейтинг: 0 / 0
24.04.2018, 14:37
    #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
25.04.2018, 09:19
    #39635814
bombimbom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задвоить строку
спасибо всем большое!
...
Рейтинг: 0 / 0
25.04.2018, 14:51
    #39636067
SY
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
25.04.2018, 15:34
    #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
25.04.2018, 15:36
    #39636114
sergix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задвоить строку
sergix,

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

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



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

SY.
...
Рейтинг: 0 / 0
25.04.2018, 16:06
    #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
25.04.2018, 16:18
    #39636165
SY
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
25.04.2018, 16:32
    #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
25.04.2018, 16:35
    #39636192
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задвоить строку
SYДа бред твое решение.
Соломон, коллега из MSSQL предлагает соединяться с "самой большой таблицей в системе", сам соединяется с doc, которая у него имеет более миллиона [ух ты!] записей :)

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

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

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

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


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