在Select中为Listagg的每一行添加Sum

时间:2017-06-09 18:49:25

标签: sql oracle sum listagg

我将以下内容用作更大查询的一部分,该查询按预期工作。

在我的情况下,一些托运人ID可以有多个项目编号,然后通过以下内容汇总。

示例:
托运人ID有3个项目编号 在这种情况下,下面将返回3个物品(包括他们的详细信息)和3个此托运人ID的总价。

是否有任何方法可以将每个送货ID的总价格加总? 假设上面例子中的总价格是10.00,20.00和30.00,那么我希望看到这个托运人ID为60.00的总数。
如果这更容易,可以在单独的列中显示。

我尝试了多种方法,但无法使其正常工作。

我的查询:

SELECT
    c.SHIPPER_ID AS Identnummer
    , LISTAGG
    (
        'ITEM NO.: ' || m.ITEM_NUMBER || 
        ' -nl-ARTICLE NAME: ' || a.ARTICLE_NAME || 
        ' -nl-NET PRICE: ' || m.NET_PRICE || 
        ' -nl-TAX: ' || NVL(m.TAX, 0) || 
        ' -nl-GROSS_PRICE: ' || (m.NET_PRICE + m.TAX),
        ' -nl--nl-'
    ) WITHIN GROUP (ORDER BY m.SHIPMENT_ID) AS Article
FROM 
    myTable m
/* ... */

2 个答案:

答案 0 :(得分:3)

我错过了什么吗?你会使用SUM()

吗?
select . . .,
       listagg(. . . ),
       sum(m.NET_PRICE + m.TAX) as total_gross_price

答案 1 :(得分:0)

WITH CTE
     AS (SELECT c.SHIPPER_ID AS Identnummer
               ,LISTAGG ('ITEM NO.: ' || m.ITEM_NUMBER || ' -nl-ARTICLE NAME: ' || a.ARTICLE_NAME || ' -nl-NET PRICE: ' || m.NET_PRICE ||
                         ' -nl-TAX: ' || NVL (m.TAX, 0) || ' -nl-GROSS_PRICE: ' || (m.NET_PRICE + m.TAX)
                        ,' -nl--nl-')
                WITHIN GROUP (ORDER BY m.SHIPMENT_ID)
                    AS Article
               ,c.AMOUNT
           FROM myTable m)
  SELECT Identnummer, Article, SUM (AMOUNT) AS Amount
    FROM CTE
GROUP BY Identnummer, Article