【问题标题】:Oracle SQL: error not a single-group group function in Select with XmlaggOracle SQL:Select with Xmlagg 中的错误不是单组组函数
【发布时间】:2017-12-07 10:44:08
【问题描述】:

我有一个表设置,它为每一列 p.S_ID 返回多行列 i.AIN,所以我尝试将这些聚合起来,以便为每个唯一的 i.AIN 记录只获取一行

我无法使用 Listagg,因为我超出了那里的字符数限制。

使用来自该网站的信息,我创建了以下查询,但收到以下错误:

"ORA-00937: not a single-group group function"

有人可以告诉我如何在此处更改我的 GROUP BY 以使其正常工作,或者我的查询是否还有其他问题?

我的查询(缩短):

ALTER SESSION ENABLE PARALLEL QUERY;
SELECT
    p.S_ID AS ID
    , XMLELEMENT
    (
        "AINs", XMLAGG
        (
            XMLELEMENT
            (
                "AIN", i.AIN || 
                '-nl-Article: ' || SUBSTR(a.AIN_NAME, 1, 50) || '...' || 
                '-nl-Quantity: ' || SUM(i.UNITS) || 
                '-nl-Price: ' || TO_CHAR(i.PRICE, 'FM9,990.00') || ' + ' || TO_CHAR(i.PRICE_TAX, 'FM9,990.00') || ' USt = ' || TO_CHAR((i.PRICE + i.PRICE_TAX), 'FM9,990.00') || 
                '-nl------' || 
                '-nl-Subtotal: ' || TO_CHAR((i.PRICE * SUM(i.UNITS)), 'FM9,990.00') || ' + ' || TO_CHAR((i.PRICE_TAX * SUM(i.UNITS)), 'FM9,990.00') || ' USt = ' || TO_CHAR(((i.PRICE + i.PRICE_TAX) * SUM(i.UNITS)), 'FM9,990.00')
            )
        )
    )/*.EXTRACT('//text()')*/ AS Details
FROM 
    ITEMS i
LEFT JOIN 
    AINS a
    ON i.AIN = a.AIN
LEFT JOIN 
    PKGS p
    ON i.SHIPMENT = p.SHIPMENT
WHERE
    /*...*/
GROUP BY
    p.S_ID
    , i.AIN
    , a.AIN_NAME
    , i.UNITS
    , i.PRICE
    , i.PRICE_TAX
ORDER BY
    p.S_ID

非常感谢您对此提供的任何帮助 - 非常感谢,
迈克

【问题讨论】:

  • 我认为你应该向我们展示 XML 结构,没有它就很难说。

标签: sql oracle group-by aggregation string-aggregation


【解决方案1】:

没有真实的数据和表格,很难提供有效的示例。 您必须将聚合拆分为两个级别。首先,创建内联视图并计算小计,然后在下一级将结果汇总到一个字符串中。

  select xmlagg(....
            ) 
            from (
            select i.AIN as ain,  SUBSTR(a.AIN_NAME, 1, 50) as ain_name
                , SUM(i.UNITS) sum_units 
                , TO_CHAR(max(i.PRICE), 'FM9,990.00') || ' + ' || TO_CHAR(max(i.PRICE_TAX), 'FM9,990.00') || ' USt = ' || TO_CHAR((max(i.PRICE) + max(i.PRICE_TAX)), 'FM9,990.00') 
               ... etc
               from /*joins*/
               GROUP BY
              p.S_ID
            , i.AIN
            , a.AIN_NAME 

            ) 

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 2017-03-17
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多