powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Размножение строк одним запросом
13 сообщений из 13, страница 1 из 1
Размножение строк одним запросом
    #39256109
storysoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как размножить строку одним запросом. Через connect by получаются лишние строки. Необходимо чтобы записи с не пустым полем field2 увеличилось на одну строку

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with
  t as
    (
      select 1 as field1, 'tt' field2 from dual 
      union all  select 1, 'pp' from dual 
      union all  select 2, null from dual
      union all  select 3, null from dual
    )
select t.*, level
  from t
connect by level <= 2 and tes is not null
order by num

т.е. должно получится так

1	pp
1	tt
1	(null)
2	(null)
3	(null)
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256113
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoft,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with
  t as
    (
      select 1 as field1, 'tt' field2 from dual 
      union all  select 1, 'pp' from dual 
      union all  select 2, null from dual
      union all  select 3, null from dual
    )
select * from t
union
select distinct field1, null as field2 from t

?
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256131
Код: plsql
1.
2.
3.
4.
select *
from t
group by field1, rollup(field2)
having count(field2)>0 or grouping(filed2) = 0

storysoft запис и с не пустым полем field2 увелич илось на одну строку что в твоем понимании есть "записи" и "строку"?
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256164
Alexander_Ttl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoft, так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with
  t as
    (
      select 1 as field1, 'tt' field2 from dual 
      union all  select 1, 'pp' from dual 
      union all  select 2, null from dual
      union all  select 3, null from dual
    )
select t.* from t
inner join (select level x from dual connect by level <=2)x on field2 is not null
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256193
storysoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
null + не null в одном filed1,

Не совсем ясно выразился, но ваше решение подходит.
То есть для записей с field1=1 должная добавиться 1 строка с пустым field2
Код: plsql
1.
2.
3.
4.
field1 field2
1	pp
1	tt
1	(null)
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256234
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoft,

Еще вариант
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with
  t as
    (
      select 1 as field1, 'tt' field2 from dual
      union all  select 1, 'pp' from dual
      union all  select 1, null from dual
      union all  select 2, null from dual
      union all  select 3, null from dual
      union all  select 4, 'tt' from dual
      union all  select 4, 'pp' from dual
    )
, t2 as (select t.*, last_value(field2) over (partition by field1) as f2 from t)
select t2.field1, case when n.num = 2 then null else t2.field2 end as field2 from t2
join (select level as num from dual connect by level<=2) n on n.num=1 or t2.f2=t2.field2
/
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256248
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoft,

Для приведенного мной набора данных вариант с group by лучше так сделать
Код: plsql
1.
2.
3.
4.
select *
from t
group by field1, rollup(field2)
having count(field2)=count(field1) or grouping(filed2) = 0
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256288
storysoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцов,

Как то можно сделать без group by? Если в выборке будет еще несколько столбцов то этот вариант не подойдет. Все в group by включать?

with
t as
(
select 1 as field1, 'tt' field2, 1 from dual
union all select 1, 'pp', 1 from dual
union all select 2, null, 3 from dual
union all select 3, null, 4 from dual
)
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256295
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoft,

Я же показал как. См. мой вариант с last_value или union
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256302
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
storysoftПавел Воронцов,

Как то можно сделать без group by? Если в выборке будет еще несколько столбцов то этот вариант не подойдет. Все в group by включать?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with
  t as
    (
      select 1 as field1, 'tt' field2, 1  from dual 
      union all  select 1, 'pp', 1 from dual 
      union all  select 2, null, 3 from dual
      union all  select 3, null, 4 from dual
    )



Павел, на будущее, просьба оформлять сообщение с помощью тэгов.
чтобы оформить код тэгом SRC, достаточно выделить нужный текст и нажать кнопочку SRC
над сообщением
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256303
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,
а еще сложнее можешь?)


storysoft
напильни в зубы и не задавай тупых вопросов.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t AS
 (SELECT 1 AS field1, 'tt' field2
    FROM dual
  UNION ALL
  SELECT 1, 'pp'
    FROM dual
  UNION ALL
  SELECT 2, NULL
    FROM dual
  UNION ALL
  SELECT 3, NULL FROM dual)
SELECT t.* FROM t, (SELECT LEVEL nm FROM dual CONNECT BY LEVEL <= 2) m WHERE nvl2(field2, 2, 1) >= nm

...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256310
Фотография 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.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
with
  t as
    (
      select 1 as field1, 'tt' field2, 1 f3 from dual
      union all  select 1, 'pp', 1 f3 from dual
      union all  select 1, null, 1 f3 from dual
      union all  select 2, null, 1 f3 from dual
      union all  select 3, null, 1 f3 from dual
      union all  select 4, 'tt', 1 f3 from dual
      union all  select 4, 'pp', 1 f3 from dual
    )
  -----------------------------------------------------------  
, myTab(field1, field2, f3, x) as (
  select t.*
       , row_number() over(partition by field1 order by field2 nulls first) x
  from t
  union all
  select field1, null field2, f3, x
    from myTab mt
   where mt.field2 is not null and mt.x = 1
)
select field1, field2, f3 
  from myTab
  

FIELD1                                  FIELD2 F3                                      
--------------------------------------- ------ --------------------------------------- 
1                                              1                                       
1                                       pp     1                                       
1                                       tt     1                                       
2                                              1                                       
3                                              1                                       
4                                       pp     1                                       
4                                       tt     1                                       
4                                              1                                       

8 rows selected
...
Рейтинг: 0 / 0
Размножение строк одним запросом
    #39256319
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintПавел Воронцов,
а еще сложнее можешь?)Еще можно через model или xml )

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


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