Pivot таблица с итогами по строкам и столбцам
От: D_Tony  
Дата: 19.04.16 12:08
Оценка:
Привет!

Есть — как результат запроса таблица вида:

Имя дилера Поле выборки Кол-во выборки
Дилер1 Продукт1 3
Дилер1 TOTAL 3
Дилер2 Продукт3 2
Дилер2 Продукт4 5
Дилер2 TOTAL 7
Дилер3 Продукт3 1
Дилер3 Продукт8 1
Дилер3 TOTAL 2
где, чтоб Вы поняли — поле выборки — это или название продукта, поставляемого дилеруХ, или поле TOTAL,
описывающее промежуточный подитог по этому дилеру. Т.е. сколько он всего продуктов получил.
Поле "Имя дилера" по всей таблице гарантированно содержит список всех дилеров.
Т.е. даже если ничего поставлено не было — то мы будем иметь это:
ДилерУ TOTAL 0
А вот поле выборки в случае, если оно представляет собой название продукта, поставляемого дилеруХ, то
оно не содержит обязательно ВСЕ названия всех продуктов. Из таблицы выше собственно это видно.
Продукт2, Продукт5, Продукт6, Продукт7 — их нет. Всего продуктов — 8 наименований, к примеру.

Задача. Получить сводную таблицу по данным, имеющимся в первой таблице (результат работы некоего запроса)
и по ВСЕМ данным из таблицы НазваниеПродукта — т.е. надо учесть даже не выданные продукты дилерам.

Требуемый итоговый пример вот:

Имя дилера Продукт1 Продукт2 Продукт3 Продукт4 Продукт5 Продукт6 Продукт7 Продукт8 TOTAL
Дилер1 3 0 0 0 0 0 0 0 3
Дилер2 0 0 2 5 0 0 0 0 7
Дилер3 0 0 1 0 0 0 0 1 2
Итого 3 0 3 5 0 0 0 1 12
КАК этого добиться? Кол-во дилеров и наименований продуктов — нестатичные и заранее неизвестные.
Мне только гарантируют, что в запросе №1 в результате точно будут все дилеры, но не все продукты.
Т.е. все оставшиеся наименования продуктов я должен при создании Pivot таблицы донабрать select'ом
из таблицы НазваниеПродукта.

oracle 11g.
Отредактировано 19.04.2016 12:11 D_Tony . Предыдущая версия .
Re: Pivot таблица с итогами по строкам и столбцам
От: Dym On Россия  
Дата: 19.04.16 12:57
Оценка:
D_T>КАК этого добиться? Кол-во дилеров и наименований продуктов — нестатичные и заранее неизвестные.
D_T>oracle 11g.
Это нужно именно в результате запроса получить или можно плоскую таблицу в Excel выгрузить и там поупражняться?
Можно покурить документацию на оператор PIVOT, там, правда, надо явно указывать количество столбцов (в xml не надо), но у тебя все равно надо добивать количество продуктов, так что может подойти.
Счастье — это Glück!
Re: Pivot таблица с итогами по строкам и столбцам
От: wildwind Россия  
Дата: 19.04.16 12:58
Оценка:
Здравствуйте, D_Tony, Вы писали:

D_T>Задача. Получить сводную таблицу по данным, имеющимся в первой таблице (результат работы некоего запроса)

D_T>и по ВСЕМ данным из таблицы НазваниеПродукта — т.е. надо учесть даже не выданные продукты дилерам.

Выбираешь продукты из НазваниеПродукта. С помощью UNION ALL добавляешь строку "TOTAL". Дальше левым соединением присоединяешь основную таблицу. Дальше PIVOT. Только вот как сделать, чтобы TOTAL всегда в конце был, сходу не соображу.
Re[2]: Pivot таблица с итогами по строкам и столбцам
От: Mihas  
Дата: 19.04.16 13:19
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Только вот как сделать, чтобы TOTAL всегда в конце был, сходу не соображу.

Колонкой с порядковым номером. Во всех строках order=0. В строке TOTAL order=1.
Re[3]: Pivot таблица с итогами по строкам и столбцам
От: wildwind Россия  
Дата: 19.04.16 13:49
Оценка:
Здравствуйте, Mihas, Вы писали:

W>>Только вот как сделать, чтобы TOTAL всегда в конце был, сходу не соображу.

M>Колонкой с порядковым номером. Во всех строках order=0. В строке TOTAL order=1.

В PIVOT это как будет выглядеть?
Re[2]: Pivot таблица с итогами по строкам и столбцам
От: D_Tony  
Дата: 19.04.16 14:48
Оценка:
Здравствуйте, Dym On, Вы писали:

D_T>>КАК этого добиться? Кол-во дилеров и наименований продуктов — нестатичные и заранее неизвестные.

D_T>>oracle 11g.
DO>Это нужно именно в результате запроса получить или можно плоскую таблицу в Excel выгрузить и там поупражняться?
DO>Можно покурить документацию на оператор PIVOT, там, правда, надо явно указывать количество столбцов (в xml не надо), но у тебя все равно надо добивать количество продуктов, так что может подойти.

эксель не нужен. да и нет его на конечном компе.

pivot запрос я умею и в динамическом sql генерить, чтобы получать нужные колонки методом select * from table.

НО вопрос как все строки ИТОГО получить в своих местах. Правый столбец я получаю. А вот нижнюю строку с итого — никак.
Re[3]: Pivot таблица с итогами по строкам и столбцам
От: D_Tony  
Дата: 19.04.16 14:49
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, wildwind, Вы писали:


W>>Выбираешь продукты из НазваниеПродукта. С помощью UNION ALL добавляешь строку "TOTAL".

W>>Дальше левым соединением присоединяешь основную таблицу. Дальше PIVOT.
W>>Только вот как сделать, чтобы TOTAL всегда в конце был, сходу не соображу.
M>Колонкой с порядковым номером. Во всех строках order=0. В строке TOTAL order=1.

Да-да — присоединяюсь к предыдущему оратору — как конкретно запрос станет ЦЕЛИКОМ выглядеть?

И да — как получить правый TOTAL на своем крайнем правом месте — это тоже вопрос.
У меня он выходит на первую колонку....
Отредактировано 19.04.2016 15:26 D_Tony . Предыдущая версия . Еще …
Отредактировано 19.04.2016 14:51 D_Tony . Предыдущая версия .
Re[4]: Pivot таблица с итогами по строкам и столбцам
От: D_Tony  
Дата: 19.04.16 15:03
Оценка:
D_T>И да — как получить правый TOTAL на своем крайнем правом месте — это тоже вопрос.
D_T>У меня он выходит на первую колонку....

возможно поможет конструкция вида:
order by dealer_name, decode(order,1,1,0);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.