Развернуть сгруппированные строки в группе с помощью запроса - PullRequest
0 голосов
/ 24 сентября 2018

Мне любопытно, есть ли в Oracle SQL Developer способ расширить строки, содержащиеся в запросе по группам, в отчете или просто в сетке данных.Например, допустим, у меня есть одна Платежная транзакция с суммой платежа.Я сгруппировал эти поля, и у меня есть СУММА пунктов, которая является общей суммой оплаты.Было бы очень хорошо, если бы у меня была функция, которая позволяла бы мне просматривать элементы транзакции, составляющие общую сумму платежа, без необходимости удаления полей Group By и функции Aggregate SUM.

Использование приведенных ниже данных в качестве примера, чтобы показать, что я ищу.Только две таблицы в приведенных ниже данных образца. pymt_transactions и transaction_items .

WITH pymt_transactions AS
(
  SELECT 1 AS tran_id FROM dual UNION
  SELECT 2 AS tran_id FROM dual UNION
  SELECT 3 AS tran_id FROM dual UNION
  SELECT 4 AS tran_id FROM dual UNION
  SELECT 5 AS tran_id FROM dual
) /* END pymt_transactions CTE */
--SELECT * FROM pymt_transactions;
, transaction_items AS
(
  SELECT 1 AS tran_id, 'T-Shirt' AS retail_item, 15 AS amt FROM dual UNION
  SELECT 1 AS tran_id, 'Shoes'   AS retail_item, 50 AS amt FROM dual UNION
  SELECT 1 AS tran_id, 'Pants'   AS retail_item, 40 AS amt FROM dual UNION
  SELECT 1 AS tran_id, 'Comb'    AS retail_item, 3  AS amt FROM dual UNION
  SELECT 2 AS tran_id, 'Sweater' AS retail_item, 15 AS amt FROM dual UNION
  SELECT 2 AS tran_id, 'Belt'    AS retail_item, 12 AS amt FROM dual UNION
  SELECT 2 AS tran_id, 'Pants'   AS retail_item, 40 AS amt FROM dual UNION
  SELECT 2 AS tran_id, 'Watch'   AS retail_item, 23 AS amt FROM dual
) /* END transaction_items CTE */

SELECT pt.tran_id, ti.retail_item, ti.amt
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
ORDER BY pt.tran_id
;

Выше приведен следующий набор результатов.

enter image description here

Теперь дляГруппировка по версии.Используя те же два CTE в приведенном выше примере:

SELECT pt.tran_id, COUNT(ti.retail_item) AS num_retail_items, 
NVL(SUM(ti.amt),0) AS payment_amount
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
GROUP BY pt.tran_id
ORDER BY pt.tran_id
;

Вышеуказанный группированный запрос приводит следующие результаты и группы по значению tran_id:

enter image description here

Опять же, без необходимости писать два разных запроса, есть ли способ, которым я могу просто иметь запрос Group By и предоставить возможность просто щелкнуть, чтобы развернуть, чтобы просмотреть retail_items?Я использовал отчеты и другие системы, которые имеют эту функцию.В транзакции 1 и 2 есть четыре розничных товараЯ хочу просмотреть эти позиции, не удаляя предложение Group By и функцию Aggregate SUM, которая выдает сумму в столбце payment_amount.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Имея доступ ко всем значениям одновременно, может быть, это может быть решением?

SELECT pt.tran_id
, ti.retail_item
, ti.amt
,COUNT(ti.retail_item) over (Partition by pt.tran_id)
,SUM(ti.amt)  over (Partition by pt.tran_id)
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
ORDER BY pt.tran_id
;
0 голосов
/ 28 сентября 2018

Хорошо, давайте попробуем построить детализированный отчет.Сначала создайте отчет для определения пользователя, рассчитав сумму, добавив фильтр (я считаю, что заглавные буквы здесь важны) enter image description here

Затем добавьте еще один отчет с начальным значением sql.enter image description here

И добавьте ссылку на отчет sumcnt enter image description here

Теперь запустив верхний отчет и щелкнув по нему правой кнопкой мыши, вы получитеэто: enter image description here

удачи

0 голосов
/ 24 сентября 2018

Попробуйте создать отчет.

enter image description here Просмотр> Отчеты.

Пользовательские отчеты.

Добавление нового отчета.

Укажите основной SQL, затем перейдите и добавьте дочерний отчет и свяжите данные вместе с: BIND.

Затем щелкните строку вверху и получите подробные данные, которые вы хотите получить ниже.enter image description here

Вы можете начать веселиться с диаграммами, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...