【问题标题】:Multiple LISTAGG rows for a certain number of records特定数量记录的多个 LISTAGG 行
【发布时间】:2017-11-27 02:14:08
【问题描述】:

我没能解决这个难题。我想按订单的每个第三个跟踪号拆分一个 listagg 查询。

Order Tracking
1     123
1     432
1     566 
1     867
1     999 
2     321
2     742
2     456
2     987

我目前的输出是将每个订单的所有跟踪号集中在一起

Order Tracking
1     123, 432, 566, 867, 999
2     321, 742, 456, 987

我想要的结果分成每行最多 3 个。

Order Tracking
1     123, 432, 566
1     867, 999
2     321, 742, 456
2     987 

【问题讨论】:

    标签: oracle11g listagg


    【解决方案1】:

    您可以在 CTE 中使用 ROW_NUMBER 在此处对订单进行三个分组:

    WITH cte AS (
        SELECT "Order", Tracking,
            (ROW_NUMBER() OVER (PARTITION BY "Order" ORDER BY Tracking) - 1) / 3 AS grp
        FROM yourTable
    )
    
    SELECT
        "Order",
        LISTAGG(Tracking, ', ') WITHIN GROUP (ORDER BY Tracking) "Tracking"
    FROM cte
    GROUP BY
        "Order", grp
    ORDER BY
        "Order", grp;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多