代码之家  ›  专栏  ›  技术社区  ›  Code Novice

按查询展开分组中的分组行

  •  1
  • Code Novice  · 技术社区  · 5 年前

    以下面的数据为例来说明我在寻找什么。以下示例数据中只有两个表。 pymt\u事务和事务\u项 .

    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

    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
    ;
    

    上面的按查询分组生成以下结果和按事务id分组:

    enter image description here

    3 回复  |  直到 5 年前
        1
  •  1
  •   thatjeffsmith    5 年前

    试着建立一个报告。

    enter image description here 查看>报告。

    用户定义的报告。

    提供主SQL,然后添加一个子报表,并用:BIND将数据绑定在一起。

    enter image description here

        2
  •  1
  •   W_O_L_F    5 年前

    一次访问所有的值,也许这是一个解决方案?

    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
    ;
    
        3
  •  1
  •   W_O_L_F    5 年前

    enter image description here

    然后用您的初始sql添加另一个报表。 enter image description here

    并添加对sumcnt报告的引用 enter image description here

    enter image description here

    祝你好运