Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить из таблицы 1 таблицу 2 / 7 сообщений из 7, страница 1 из 1
23.12.2020, 17:28
    #40030566
tort3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить из таблицы 1 таблицу 2
Подскажите, кому не сложно)
Есть таблица 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
23.12.2020, 18:05
    #40030580
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить из таблицы 1 таблицу 2
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
23.12.2020, 18:16
    #40030588
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить из таблицы 1 таблицу 2
Никак, если не знать заранее число полей результата (или мах возможное число полей результата). Скажем если за конкретный год:

Код: 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
23.12.2020, 18:20
    #40030591
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить из таблицы 1 таблицу 2
env
tort3,

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


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

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

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

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

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


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