Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Из столбцов в строки _help  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Вопрос такой. Существует таблица:

clie | fio | 4 | 5 | 6 | 7 | 8 | 9 | sum | vsego
---------------------------------------------------------------------
1 | ivanov | 10.0 | 20.0 | 30.0 | 40.0 | 50.0 | 10.0 | 160.0 | 500.0
2 | petrov | 20.0 | 10.0 | 40.0 | 30.0 | 10.0 | 60.0 | 170.0 | 540.0
.................................................................................................
и т.д
в поле sum сумма 4,5,6,7,8,9 столбцов
поле vsego просто число, но привязанное к clie

Вопрос как сделать так:

1 | ivanov | 10.0 |
1 | ivanov | 20.0 |
1 | ivanov | 30.0 |
1 | ivanov | 40.0 |
1 | ivanov | 50.0 |
1 | ivanov | 10.0 |
2 | petrov | 20.0 |
2 | petrov | 10.0 |
2 | petrov | 40.0 |
2 | petrov | 30.0 |
2 | petrov | 10.0 |
2 | petrov | 60.0 |
.............................
и т.д.
Чувствую что просто а сообразить немогу. Помогите пожалуйста.
21 сен 06, 12:11    [3166639]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116318
Медленно и печально

with tab1
as
(select 1 clie, 'ivanov' fio, 10.0 c_4, 20.0 c_5, 30.0 c_6, 40.0 c_7, 50.0 c_8, 10.0 c_9, 160.0 suma, 500.0 vsego
 from dual
 union all
 select 2 clie, 'petrov' fio, 20.0 c_4, 10.0 c_5, 40.0 c_6, 30.0 c_7, 10.0 c_8, 60.0 c_9, 170.0 suma, 540.0 vsego
 from dual
)
select clie, fio, c_4
from
(select clie, fio, c_4, 1 num
from tab1
union all 
select clie, fio, c_5, 2 
from tab1
union all
select clie, fio, c_6, 3
from tab1
union all
select clie, fio, c_7, 4
from tab1
union all
select clie, fio, c_8, 5
from tab1
union all
select clie, fio, c_9, 6
from tab1
order by 1, 2, 4)



CLIE	FIO	C_4
1	ivanov	10
1	ivanov	20
1	ivanov	30
1	ivanov	40
1	ivanov	50
1	ivanov	10
2	petrov	20
2	petrov	10
2	petrov	40
2	petrov	30
2	petrov	10
2	petrov	60
21 сен 06, 12:22    [3166746]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Так их несколько тысяч.
21 сен 06, 12:27    [3166803]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116318
alex_soft
Так их несколько тысяч.

Колонок ? Ого :-)
Генерируйте мой скрипт динамически через Data Dictionary
21 сен 06, 12:40    [3166942]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
Elic
Member

Откуда:
Сообщений: 29991
STFF Как создать VIEW, поворачивающее таблицу на 90 градусов
21 сен 06, 13:24    [3167288]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116318
Кстати, вот еще до кучи вариант с grouping sets.
Покомпактнее, чем UNION

select clie, fio, decode(grouping_id(c_4),0,c_4,decode(grouping_id(c_5),0,c_5,
                         decode(grouping_id(c_6),0,c_6,decode(grouping_id(c_7),0,c_7,
                         decode(grouping_id(c_8),0,c_8,decode(grouping_id(c_9),0,c_9))))))
from tab1
group by clie, fio, grouping sets (c_4,c_5,c_6,c_7,c_8,c_9)      
order by 1,2,grouping_id(c_4), grouping_id(c_5), grouping_id(c_6),
               grouping_id(c_7), grouping_id(c_8), grouping_id(c_9)
/
21 сен 06, 13:26    [3167306]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Спасибо. Есть над чем поразмыслить.
21 сен 06, 17:48    [3169439]     Ответить | Цитировать Сообщить модератору
 Re: Из столбцов в строки _help  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Короче я сделал так. Может конечно непрофессионально, но работает так как надо.

SELECT *
  FROM (SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.APREL,
               '01.04.2003' AS DT_BEGIN,
               '30.04.2003' AS DT_END
          FROM SPISANIE S
        UNION ALL
        SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.MAY,
               '01.05.2003' AS DT_BEGIN,
               '31.05.2003' AS DT_END
          FROM SPISANIE S
       UNION ALL
        SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.UIN,
               '01.06.2003' AS DT_BEGIN,
               '30.06.2003' AS DT_END
          FROM SPISANIE S
        UNION ALL
        SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.UIL,
               '01.07.2003' AS DT_BEGIN,
               '31.07.2003' AS DT_END
          FROM SPISANIE S
        UNION ALL
        SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.AUG,
               '01.08.2003' AS DT_BEGIN,
               '31.08.2003' AS DT_END
          FROM SPISANIE S
        UNION ALL
        SELECT S.CLIE_ID,
               S.CLIE_NAME,
               S.SEP,
               '01.09.2003' AS DT_BEGIN,
               '30.09.2003' AS DT_END
          FROM SPISANIE S)
 ORDER BY 4
22 сен 06, 05:34    [3170498]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить