【问题标题】:Oracle SQL: Missing identifier error in Select with XmlaggOracle SQL:Select with Xmlagg 中缺少标识符错误
【发布时间】:2017-12-10 07:19:19
【问题描述】:

我是 Oracle 的新手,希望这里有人可以帮助我。

我有一个不带行聚合返回以下内容的 Select:
current output

我的问题是,我可以在第一列中为某些 ID 设置多行,而 每个 ID 只需要一行,如下所示
required output

Select Distinct 在我的情况下不是一个选项,Listag 不允许第二列有足够的字符。

经过一些研究,我认为 Xmlagg 正是我在这里需要的,但我无法让它工作并且总是在这里出错,所以我认为我写错了。

最新错误:

ORA-00931: missing identifier 

有人可以告诉我如何正确地写这个吗?

我的查询(缩短):

ALTER SESSION ENABLE PARALLEL QUERY;
SELECT
    a.Id
    , RTRIM(XMLAGG(XMLELEMENT("Details", 
        (
            b.title || ' -' || c.item || ' -' || b.quantity) ORDER BY b.title)
        ).EXTRACT('//text()'), ' --- ') AS Details
    , TO_CHAR(c.total, 'FM9,990.00') AS Sum
FROM 
    table1 d
/* joins */
WHERE
/* ... */
GROUP BY
    a.Id
    , b.title
    , c.item
    , b.quantity
ORDER BY
    a.Id

非常感谢。
迈克

【问题讨论】:

    标签: sql xml oracle concatenation aggregation


    【解决方案1】:

    只有一些东西需要在这里和那里移动。

    SELECT a.Id ,
        RTRIM(XMLAGG(XMLELEMENT("Details", b.title
        || ' -'
        || c.item
        || ' -'
        || b.quantity ,' --- ' ).EXTRACT('//text()')
    ORDER BY b.title),
        ' --- ')
    AS
        Details , TO_CHAR(c.total, 'FM9,990.00')
    AS
        SUM FROM table1 d
        /* joins */
        WHERE 
    * ... */
    GROUP BY
        a.Id
        , b.title
        , c.item
        , b.quantity
    ORDER BY
        a.Id
    

    【讨论】:

    • 谢谢,苏迪普塔。看起来这不是我需要的。您可以忽略总和,因为我可以从单独的表中提取它,因此不必计算它。对我来说最重要的是合并“详细信息”的列,但这既是文本又是数字,所以我觉得这里是错误的。
    • @keewee279 - 运行时是否出现任何错误?不知道你的意思是什么,当你说但这既是文本又是数字,所以我在这里似乎错了
    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多