powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить из таблицы 1 таблицу 2
7 сообщений из 7, страница 1 из 1
Как получить из таблицы 1 таблицу 2
    #40030566
tort3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, кому не сложно)
Есть таблица T:

NAME D_NUMBER DT SUMMA
ООО Рога и копыта 216/789 31.08.16 800
ООО Рога и копыта 216/789 21.08.16 50
ООО Рога и копыта 2016/987 23.05.16 100
ООО Рога и копыта 2016/1234 21.08.16 200
ЗАО Ромашка 2006/333 12.06.16 300
ЗАО Василек 555/666 02.07.16 400
ЗАО Василек 555/666 02.06.16 500
ЗАО Василек 33/8889 23.05.16 600

Нужно получить таблицу:

NAME Май Июнь Июль Август
ЗАО Ромашка 300 1050
ООО Рога и копыта 100
ЗАО Василек 600 500 400

Дошел только до:)
select name, to_char (dt, 'FmMonth'), sum (summa) as sam from T
group by name, to_char (dt, 'FmMonth')

ООО Рога и копыта Август 1050
ЗАО Василек Июль 400
ЗАО Василек Май 600
ООО Рога и копыта Май 100
ЗАО Ромашка Июнь 300
ЗАО Василек Июнь 500
Пытался с помощью функции PIVOT, но так понимаю, что нужно что-то другое. Или я ошибаюсь?
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030580
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tort3,

Вроде pivot'а должно хватить.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t(name, num, dt, sum_) as (
select 'ООО Рога и копыта', '216/789', to_date('31.08.16', 'dd.mm.yy'), 800 from dual union all
select 'ООО Рога и копыта', '216/789', to_date('21.08.16', 'dd.mm.yy'), 50 from dual union all
select 'ООО Рога и копыта', '2016/987', to_date('23.05.16', 'dd.mm.yy'), 100 from dual union all
select 'ООО Рога и копыта', '2016/1234', to_date('21.08.16', 'dd.mm.yy'), 200 from dual union all
select 'ЗАО Ромашка', '2006/333', to_date('12.06.16', 'dd.mm.yy'), 300 from dual union all
select 'ЗАО Василек', '555/666', to_date('02.07.16', 'dd.mm.yy'), 400 from dual union all
select 'ЗАО Василек', '555/666', to_date('02.06.16', 'dd.mm.yy'), 500 from dual union all
select 'ЗАО Василек', '33/8889', to_date('23.05.16', 'dd.mm.yy'), 600 from dual
)
select 
    *
from
    (select name, to_char(dt, 'fmmonth', 'NLS_DATE_LANGUAGE=''RUSSIAN''') dt, sum_ from t) tt
pivot 
    (sum(sum_) for dt in (/*'январь', 'февраль', 'март', 'апрель',*/ 'май', 'июнь', 'июль', 'август'));
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030588
Фотография 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.
with t1 as (
            select  name,
                    to_char(dt,'FmMonth') mon,
                    summa
              from  t
              where dt >= trunc(sysdate,'yy')
                and dt <  add_months(trunc(sysdate,'yy'),12)
           )
select  *
  from  t1
  pivot(
        sum(summa)
        for mon in (
                    'January',
                    'February',
                    'March',
                    'April',
                    'May',
                    'June',
                    'July',
                    'August',
                    'September',
                    'October',
                    'November',
                    'December'
                   )
       )
  order b y name
/
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030591
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
tort3,

Вроде pivot'а должно хватить.


Т.е. суммируем в кучу данные того-же месяца за все года .

SY.
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030633
tort3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Спасибо огромное! Моя ошибка была в том, что не присвоил псевдоним "to_char (dt, 'FmMonth')" и при испольpованиии с IN была ошибка "отсутствует ключевое слово IN"
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030638
tort3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Большое спасибо! Однозначно так практичнее. Хотя не исключено, что задание может звучать собрать суммы по месяцам за все года)
Думаю, что для конкретного случая (в исходной таблице данные только за один год) подразумевалось решение попроще.
...
Рейтинг: 0 / 0
Как получить из таблицы 1 таблицу 2
    #40030706
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соломон,
SY
суммируем в кучу данные того-же месяца за все года

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


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