powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамическое именование столбцов
4 сообщений из 4, страница 1 из 1
Динамическое именование столбцов
    #40094836
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Прошу помочь с реализацией размножения поля (см. пример во вложении)
PL/SQL у меня крайне низкоуровневый, на SQL Oracle пробовала разные варианты, но до итогового решения не дошла
Пример моих изысканий:
Код: sql
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.
38.
39.
40.
41.
42.
43.
44.
45.
create table bureau
(
report_key number,
bureau_date date
)
;

insert into bureau
   (report_key, bureau_date)
 values
   (1, to_date('15/07/2020', 'dd/mm/yyyy'));
insert into bureau
   (report_key, bureau_date)
 values
   (2, to_date('01/05/2020', 'dd/mm/yyyy'));
commit
;

--не получилось развернуть pivot-ом, нужны динамические именования столбцов (хардкодом их добавлять не вариант)
select distinct
    report_key, bureau_date, add_months(bureau_date,-level) as prev_months, level as rn, 'cut_date_'||level as field_name
from BUREAU b
connect by
    prior report_key = report_key and
    prior bureau_date = bureau_date and
    prior dbms_random.value is not null and
    level between 1 and 10
  order by report_key, bureau_date, 4
;

--не тот вид, что ожидаю
with dates as (
 select distinct
    report_key, bureau_date, add_months(bureau_date,-level) as cut_date, level as rn, 'cut_date_'||level as field_name
from BUREAU b
connect by
    prior report_key = report_key and
    prior bureau_date = bureau_date and
    prior dbms_random.value is not null and
    level between 1 and 10
  order by report_key, bureau_date, 4)
select distinct *
from dates
  pivot xml(min(cut_date) for(field_name) in (select distinct field_name from dates)) 
;



Спасибо заранее
...
Рейтинг: 0 / 0
Динамическое именование столбцов
    #40094855
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova

PL/SQL у меня крайне низкоуровневый


про PL/SQL не понял

генерить динамически селект (хоть пивот, хоть декоде)

но вот только вопрос что с ним (курсором) дальше делать/как использовать

.....
stax
...
Рейтинг: 0 / 0
Динамическое именование столбцов
    #40094876
E_Schekaturova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

имела в виду, что, может, какой-то цикл можно написать, который атрибуты будет от i до j добавлять в табличку
...
Рейтинг: 0 / 0
Динамическое именование столбцов
    #40094882
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E_Schekaturova
Stax,

имела в виду, что, может, какой-то цикл можно написать, который атрибуты будет от i до j добавлять в табличку

не совсем понимаю, что Вам надо
напр
шахматка для emp

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select * from (select deptno,job,sal from scott.emp) e 
pivot (sum(sal) for(job) in ( 
    'ANALYST' job_an,'CLERK' job_cl,'SALESMAN' job_sa,'MANAGER' job_ma,'PRESIDENT' job_pr) 
    ) 
order by deptno 


DEPTNO	JOB_AN	JOB_CL	JOB_SA	JOB_MA	JOB_PR
10	-	1300	-	2450	5000
20	6000	1900	-	2975	-
30	-	950	5600	2850	-
Download CSV
3 rows selected.



Вам надо программно (цикл) сформировать строку

'ANALYST' job_an,'CLERK' job_cl,'SALESMAN' job_sa,'MANAGER' job_ma,'PRESIDENT'

используя табличку emp

и так для любой выборки
да будет два прогона, один для формирования строки, второй сам результат


зы
конкретно по Вашей bureau,
если Вам надо формровать шахматку в зависомости от параметра n(число 10)
то достаточно просто for i in (1..n) loop ...

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


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