Oracle SQL:使用Xmlagg选择时缺少标识符错误

时间:2017-07-06 10:22:51

标签: sql xml oracle concatenation aggregation

我是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

非常感谢提前 麦克

1 个答案:

答案 0 :(得分:0)

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

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