Добавьте сумму к каждой строке Listagg в Select

Я использую следующее как часть более крупного запроса, который работает по назначению.

В моем случае некоторые идентификаторы грузоотправителей могут иметь более одного номера товара, которые затем будут объединены с помощью приведенного ниже.

Пример.
Идентификатор грузоотправителя содержит 3 номера товара.
В этом случае ниже будет возвращено 3 товара (включая их данные) и 3 цены брутто для этого идентификатора грузоотправителя.

Можно ли как-нибудь суммировать цены брутто для каждого идентификатора доставки?
Предположим, что цены брутто в приведенном выше примере составляют 10,00, 20,00 и 30,00, тогда я хотел бы увидеть общую сумму для этого идентификатор грузоотправителя 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
/* ... */

person keewee279    schedule 09.06.2017    source источник


Ответы (1)


Я что-то упускаю? Не могли бы вы просто использовать SUM():

select . . .,
       listagg(. . . ),
       sum(m.NET_PRICE + m.TAX) as total_gross_price
person Gordon Linoff    schedule 09.06.2017
comment
Спасибо, Гордон. Может я не так описал. Допустим, у меня есть 100 идентификаторов грузоотправителей. Затем у некоторых из них есть только один товар, поэтому здесь сумма для этого идентификатора грузоотправителя совпадает с ценой брутто для товара. Но если идентификатор грузоотправителя имеет более одного элемента, мне нужно будет рассчитать их сумму, я думаю, в списке. Ваш подход не сработает, потому что за пределами списка нет брутто-цены. Я вижу это неправильно? - person keewee279; 09.06.2017
comment
@keewee279 . . . У вас есть значения компонентов, поэтому вы можете поместить это выражение в SUM(). - person Gordon Linoff; 09.06.2017
comment
Спасибо. Извините, я новичок в Oracle. Таким образом, это будет работать также, если для идентификатора грузоотправителя указано более одной чистой цены и налога? - person keewee279; 09.06.2017
comment
@keewee279 . . . Да. Удивительно, что вы понимаете listagg(), но не понимаете sum(). Последнее намного проще. - person Gordon Linoff; 09.06.2017