【问题标题】:Oracle SQL - Concat + Listagg + Count does not work togetherOracle SQL - Concat + Listagg + Count 不能一起工作
【发布时间】:2022-08-18 19:35:47
【问题描述】:

我有一张桌子 \'allorders\' ,看起来像这样:

Order_Nr Items
O100 5X1
O100 5X1
O100 7B3
O101 3A2
O101 3A2

我想从一个订单中获取所有项目作为一个字符串+订单号,应该如下所示:

Order_Nr OrderOverview
O100 2 x 5X1 1 x 7B3

我的 SQL 查询看起来像这样:

SELECT Order_Nr, LISTAGG(CONCAT(CONCAT(COUNT(Items), \' x \'), Items), \' \') WITHIN GROUP(ORDER by Items) as OrderOverview
FROM allorders 
WHERE Order_Nr = \'O100\'
ORDER BY Order_Nr;

我正在使用 Oracle 11g,我收到以下错误消息:

ORA-00937: 单组没有组功能 00937. 00000 - “不是单组群功能” *原因:
*行动:

如果我没有在 SQL Query 中选择 Order_Nr,它可以工作,但我希望在结果中看到它,以获得我想在未来创建的可能视图。

我错过了什么?我的想法一般都行不通吗? 我希望我已经处理好数据,但如果信息丢失,请告诉我。

谢谢,

    标签: sql oracle oracle11g sql-order-by listagg


    【解决方案1】:

    你想使用GROUP BY 两次;首先,为每个项目和订单配对找到COUNT,然后,将字符串与LISTAGG 连接起来:

    SELECT order_nr,
           LISTAGG(counted_items, ' ') WITHIN GROUP (ORDER BY items)
             AS OrderOverview
    FROM   (
      SELECT order_nr,
             items,
             COUNT(*) || ' x ' || Items AS counted_items
      FROM   allorders
      WHERE Order_Nr = 'O100'
      GROUP BY
             order_nr,
             items
    )
    GROUP BY
           order_nr
    

    其中,对于样本数据:

    CREATE TABLE allorders (Order_Nr, Items) AS
    SELECT 'O100', '5X1' FROM DUAL UNION ALL
    SELECT 'O100', '5X1' FROM DUAL UNION ALL
    SELECT 'O100', '7B3' FROM DUAL UNION ALL
    SELECT 'O101', '3A2' FROM DUAL UNION ALL
    SELECT 'O101', '3A2' FROM DUAL;
    

    输出:

    ORDER_NR ORDEROVERVIEW
    O100 2 x 5X1 1 x 7B3

    db<>小提琴here

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2017-11-17
      相关资源
      最近更新 更多