한 구매자가 여러 개의 상품을 한 번에 구매했다고 가정해보자.
상품 00A
, 00B
, 00C
, 00D
를 구입해 오더번호 ORDER001
이 생성되었다.
이 때 오더 테이블에서 ORDER001
에 묶인 상품을 조회해 보면 다음과 같을 것이다.
SELECT ORDER_NO, ITEM_NO
FROM ORDER_TABLE
WHERE ORDER_NO = 'ORDER001'
ORDER_NO | ITEM_NO |
---|---|
ORDER001 | 00A |
ORDER001 | 00B |
ORDER001 | 00C |
ORDER001 | 00D |
이 때 사용할 수 있는 함수가 WM_CONCAT()
함수이다.
SELECT ORDER_NO, WM_CONCAT(DISTINCT ITEM_NO)
FROM ORDER_TABLE
GROUP BY ORDER_NO
ORDER_NO | ITEM_NO |
---|---|
ORDER001 | 00A,00B,00C,00D |
ORDER002 | 00B,00C,00D |
ORDER003 | 00C,00D |
위의 쿼리와 같이 그룹핑 기준이 되는 컬럼(오더번호)을 GROUP BY로 묶고, 하나의 행에 이어 붙여서 표현하고 시픈 행을 WM_CONCAT()
에 삽입하여 데이터를 원하는 형태로 추출할 수 있다. 이 때 중복을 제거해야 하므로 DISTINCT
키워드를 함께 넣어준다.
SELECT ORDER_NO, WM_CONCAT(ITEM_NO)
FROM ORDER_TABLE
GROUP BY ORDER_NO
다음과 같이 중복이 제거되지 않은 형태의 결과가 출력된다.
ORDER_NO | ITEM_NO |
---|---|
ORDER001 | 00A,00B,00C,00D |
ORDER001 | 00A,00B,00C,00D |
ORDER001 | 00A,00B,00C,00D |
ORDER001 | 00A,00B,00C,00D |
ORDER002 | 00B,00C,00D |
ORDER002 | 00B,00C,00D |
ORDER002 | 00B,00C,00D |
ORDER003 | 00C,00D |
ORDER003 | 00C,00D |