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

Откуда:
Сообщений: 171
Имеется такая задача в упрощенном виде:
При наличии таблицы типа
ADRNAMSUMMA
Address1Name112
Address1Name225
Address1Name345
Address2Name125

нужно вынести поле адреса в заголовок группы, чтобы получилось что-то вроде
TEKSTSUMMA
ADDRESS1
Name112
Name225
Name345
ADDRESS2
Name125


Суммировать ничего не надо, просто организовать дополнительные строки в виде заголовков групп.

В качестве эксперимента у меня получилось что-то типа
  SELECT DECODE (GROUPING_ID (adr, nam, summa), 0, nam, UPPER(adr)) tekst, summa
    FROM (SELECT 'Address1' adr, 'Name1' nam, 12 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address1' adr, 'Name2' nam, 25 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address1' adr, 'Name3' nam, 45 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address2' adr, 'Name1' nam, 25 summa
            FROM DUAL)
GROUP BY GROUPING SETS ( (adr), (adr, nam, summa))
ORDER BY adr, GROUPING_ID (adr, nam, summa) DESC, nam

это все хорошо, но проблема в том, что в оригинальном запросе присутствуют не три поля, а тридцать три. Очень неудобно добавлять все 33 поля в все условия группировки.
Нет ли какого-нибудь более простого решения, чтобы не надо было нигде перечислять все поля таблицы?
Заранее спасибо
9 мар 16, 17:04    [18912173]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше организовать группировочные заголовки  [new]
бреак он
Guest
ziper
чтобы не надо было нигде перечислять все поля таблицы?
есть еще пара относительно элегантных sql-вариантов вставить надголовок группы, но тоже подразумевают перечисление полей. Любой вариант требует сортировку по отсутствующему в выводе полю, а значит перечисление всего, кроме сортировки.
Вот если не смущает дополнительное поле в выборке, то можно сократить нажатия клавиш, хоть и менее эффективно для сервера.
Ну и всегда можно написать программу (sql), которая за тебя перечислит поля.
9 мар 16, 17:22    [18912278]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше организовать группировочные заголовки  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 550
ziper, можно в лоб, за два прохода по таблице, если производительность не важна
with t as (SELECT 'Address1' adr, 'Name1' nam, 12 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address1' adr, 'Name2' nam, 25 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address1' adr, 'Name3' nam, 45 summa
            FROM DUAL
          UNION ALL
          SELECT 'Address2' adr, 'Name1' nam, 25 summa
            FROM DUAL
            )
select distinct adr, null summa, rank() over (order by adr) rnk from t
union all
select nam, summa, row_number() over (order by adr,nam) rnk from t
order by rnk, summa nulls first


PS обычно такое на клиенте уже делают
9 мар 16, 17:23    [18912281]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше организовать группировочные заголовки  [new]
ziper
Member

Откуда:
Сообщений: 171
вот как раз проблема в том и есть, что клиентов несколько, и чтобы эту группировку в каждом клиенте не делать я хотел попробовать добавить ее на уровне запроса.
9 мар 16, 17:53    [18912403]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить