WITH t(계약번호, 업체, 식별번호, 상품명, 종류, 종류값, 단위값) AS ( SELECT 123456700, '대한민국', 778451, '자동차', '용량' , '20' , 'KG' FROM dual UNION ALL SELECT 123456700, '대한민국', 778451, '자동차', '재질' , 'POLY' , '' FROM dual UNION ALL SELECT 123456700, '대한민국', 778451, '자동차', '크기(가로)', '300' , 'M' FROM dual UNION ALL SELECT 123456700, '대한민국', 778451, '자동차', '크기(세로)', '400' , 'M' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '용량' , '30' , 'KG' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '재질' , 'POLY' , '' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '크기(가로)', '350' , 'M' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '크기(세로)', '450' , 'M' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '크기(두께)', '600' , 'M' FROM dual UNION ALL SELECT 123456700, '대한민국', 997841, '버스' , '강도' , '186.33', 'N/MM' FROM dual ) -- 1. GROUP BY, MIN(DECODE()) SELECT 계약번호, 업체, 식별번호, 상품명 , MIN(DECODE(종류, '용량' , 종류값 || 단위값)) "용량" , MIN(DECODE(종류, '재질' , 종류값 || 단위값)) "재질" , MIN(DECODE(종류, '크기(가로)', 종류값 || 단위값)) "크기(가로)" , MIN(DECODE(종류, '크기(세로)', 종류값 || 단위값)) "크기(세로)" , MIN(DECODE(종류, '크기(두께)', 종류값 || 단위값)) "크기(두께)" , MIN(DECODE(종류, '강도' , 종류값 || 단위값)) "강도" FROM t GROUP BY 계약번호, 업체, 식별번호, 상품명 ; -- 2. PIVOT SELECT * FROM (SELECT 계약번호, 업체, 식별번호, 상품명 , 종류, 종류값 || 단위값 값 FROM t ) PIVOT (MIN(값) FOR 종류 IN ( '용량' "용량" , '재질' "재질" , '크기(가로)' "크기(가로)" , '크기(세로)' "크기(세로)" , '크기(두께)' "크기(두께)" , '강도' "강도" ) ) ;