2017-11-27 10 views
1

이 퍼즐을 해결할 수 없었습니다. 주문마다 매 3 번째 추적 번호별로 listagg 쿼리를 분할하고 싶습니다.특정 수의 레코드에 대한 여러 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 

답변

0

당신은 주문에 세 그룹을 부과하기 위해 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;