powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как собрать таблицу из названий колонок и их значений?
8 сообщений из 8, страница 1 из 1
Как собрать таблицу из названий колонок и их значений?
    #39898099
rpaa1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Подскажите пожалуйста. Есть такое задание:
Есть таблица TableA, которая состоит из нескольких полей Column1, Column2, Column3 и т.д.
Мне нужно из нее собрать таблицу, которая будет состоять из 2-ух столбцов и содержать данные:
Название столбца из TableA и значение этого столбца.

Например, есть таблица

Column1Column2Column3Value 1_1Value 2_1Value3_1Value 1_2Value 2_2Value3_2Value 1_3Value 2_3Value3_3

Результат должен быть таким:

Column1NTableColumn2NTableColumn1Value 1_2Column1Value 1_2Column1Value 1_3Column2Value 2_1Column2Value 2_2Column2Value 2_3Column3Value 3_1Column3Value 3_2Column3Value 3_3

В голову не приходит ничего, кроме как выбирать данные по одной колонки и делать UNION, типа так

Код: plsql
1.
2.
3.
4.
5.
6.
select 'Column1', Column1 from TableA
union
select 'Column2', Column2 from TableA
union
select 'Column3', Column3 from TableA
....



Надеюсь понятно написал.

Заранее спасибо.
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898109
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpaa1,
авторВ голову не приходит ничего, кроме как выбирать данные по одной колонки и делать UNION, типа так
Cобственно, до появления UNPIVOT так и делали. Ну а где его нет (версия < 11) - делают до сих пор.
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898111
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
with t (Column1,Column2,Column3)
  as (
      select 'Value 1_1','Value 2_1','Value 3_1' from dual union all
      select 'Value 1_2','Value 2_2','Value 3_2' from dual union all
      select 'Value 1_3','Value 2_3','Value 3_3' from dual
     )
select  *
  from  t
  unpivot(
          Column2NTable for Column1NTable in (
                                              Column1 as 'Column1',
                                              Column2 as 'Column2',
                                              Column3 as 'Column3'
                                             )
         )
/

COLUMN1NTABLE COLUMN2NTABLE
------------- -------------
Column1       Value 1_1
Column2       Value 2_1
Column3       Value 3_1
Column1       Value 1_2
Column2       Value 2_2
Column3       Value 3_2
Column1       Value 1_3
Column2       Value 2_3
Column3       Value 3_3

9 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898112
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MazoHist

Cобственно, до появления UNPIVOT так и делали. Ну а где его нет (версия < 11) - делают до сих пор.
Даже если закрыть глаза на лишний distinct в плане, то многократное сканирование все равно делает такой подход не самым привлекательным.
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898252
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpaa1
В голову не приходит

Стимуляции воображения ради:
Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
with t(Column1,Column2,Column3) as (
select 'Value 1_1', 'Value 2_1', 'Value3_1'
from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
from dual )
select decode(d.r, 1, 'Column1', 2, 'Column2', 3, 'Column3') Column1NTable
     , decode(d.r, 1,  Column1 , 2,  Column2 , 3,  Column3 ) Column2NTable
  from t, (select rownum r from dual connect by level <=3) d
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select decode(grouping_id(column1, column2,column3)
             , 3, 'Column1'
             , 5, 'Column2'
             , 6, 'Column3'
             ) Column1NTable
     , coalesce(column1, column2,column3) Column2NTable
  from t
group by grouping sets(Column1, Column2, Column3)
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select decode(grouping_id(column1, column2,column3)
             , 3, 'Column1'
             , 5, 'Column2'
             , 6, 'Column3'
             ) Column1NTable
     , coalesce(column1, column2,column3) Column2NTable
  from t
group by cube(Column1, Column2, Column3)
having grouping_id(column1, column2,column3) in (3,5,6)
;

with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
          from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
          from dual union all select 'Value 1_3', 'Value 2_3', 'Value3_3'
          from dual )
select column1 Column1NTable, column2 Column2NTable 
  from t
 model
 partition by (column1 c1, column2 c2, column3 c3)
 dimension by (1 n)
 measures(column1, column2, column3)
 rules( column2[3] = column3[1], column1[3] = 'Column3'
      , column2[2] = column2[1], column1[2] = 'Column2'
      , column2[1] = column1[1], column1[1] = 'Column1'
      ) 
;

...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898294
rpaa1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо. Решил сделать через unpivot. Про него что-то совсем забыл)
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39898460
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
rpaa1
В голову не приходит

Стимуляции воображения ради:

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t as (select 'Value 1_1' Column1, 'Value 2_1' Column2, 'Value3_1' Column3
  2            from dual union all select 'Value 1_2', 'Value 2_2', 'Value3_2'
  3            from dual union all select 'Value 1_2', 'Value 2_3', 'Value3_3'
  4            from dual )
  5  select decode(grouping_id(column1, column2,column3)
  6               , 3, 'Column1'
  7               , 5, 'Column2'
  8               , 6, 'Column3'
  9               ) Column1NTable
 10       , coalesce(column1, column2,column3) Column2NTable
 11    from t
 12* group by grouping sets(Column1, Column2, Column3)
 13  /

COLUMN1 COLUMN2NT
------- ---------
Column1 Value 1_1
Column1 Value 1_2
Column2 Value 2_1
Column2 Value 2_2
Column2 Value 2_3
Column3 Value3_2
Column3 Value3_3
Column3 Value3_1

8 rows selected.
...
Рейтинг: 0 / 0
Как собрать таблицу из названий колонок и их значений?
    #39900305
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous

Стимуляции воображения ради:

раз уж зашла речь за модель, без xml стимуляция кажется не полной
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
    t.*
from 
    xmltable
    (
        'ROWSET/ROW/*'
        passing dbms_xmlgen.getXMLType('select * from user_objects')
        columns 
            name  varchar2(4000) path 'name()',
            value varchar2(4000) path 'text()'
    ) t;


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


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