SELECT IF(B.lv = 0 , '*' , null) as "0", IF(B.lv = 1 , '*' , null) as "1", IF(B.lv = 2 , '*' , null) as "2", IF(B.lv = 3 , '*' , null) as "3", IF(B.lv = 4 , '*' , null) as "4", B.lv, A.* FROM PT_BOM A, ( SELECT 0 lv , t1.PART_NO , t1.PART_PARENT FROM PT_BOM t1 WHERE (t1.PART_PARENT IS NULL OR t1.PART_PARENT = '') UNION ALL SELECT 1 lv , t2.PART_NO , t2.PART_PARENT FROM PT_BOM t1 , PT_BOM t2 WHERE (t1.PART_PARENT IS NULL OR t1.PART_PARENT = '') AND t2.PART_PARENT = t1.PART_NO UNION ALL SELECT 2 lv , t3.PART_NO , t3.PART_PARENT FROM PT_BOM t1 , PT_BOM t2 , PT_BOM t3 WHERE (t1.PART_PARENT IS NULL OR t1.PART_PARENT = '') AND t2.PART_PARENT = t1.PART_NO AND t3.PART_PARENT = t2.PART_NO UNION ALL SELECT 3 lv , t4.PART_NO , t4.PART_PARENT FROM PT_BOM t1 , PT_BOM t2 , PT_BOM t3 , PT_BOM t4 WHERE (t1.PART_PARENT IS NULL OR t1.PART_PARENT = '') AND t2.PART_PARENT = t1.PART_NO AND t3.PART_PARENT = t2.PART_NO AND t4.PART_PARENT = t3.PART_NO UNION ALL SELECT 4 lv , t5.PART_NO , t5.PART_PARENT FROM PT_BOM t1 , PT_BOM t2 , PT_BOM t3 , PT_BOM t4 , PT_BOM t5 WHERE (t1.PART_PARENT IS NULL OR t1.PART_PARENT = '') AND t2.PART_PARENT = t1.PART_NO AND t3.PART_PARENT = t2.PART_NO AND t4.PART_PARENT = t3.PART_NO AND t5.PART_PARENT = t4.PART_NO )B WHERE A.PART_NO = B.PART_NO;
로 쿼리를 작성했는데 .
0 1 2 3 4 LV COMP_CD NO PART_NO PART_PARENT USE_YN
* 0 UL 10014 PART_0015 "" Y
* 1 UL 10015 PART_0002 PART_0015 Y
* 1 UL 10016 PART_0004 PART_0015 Y
* 0 UL 10022 PART_0009 "" Y
* 1 UL 10024 PART_0013 PART_0009 Y
* 0 UL 10029 PART_0014 "" Y
* 1 UL 10031 PART_0016 PART_0014 Y
* 2 UL 10032 PART_0018 PART_0013 Y
이렇게 결과가 나오 더라구요
0 1 2 3 4 LV COMP_CD NO PART_NO PART_PARENT USE_YN
* 0 UL 10014 PART_0015 "" Y
* 1 UL 10015 PART_0002 PART_0015 Y
* 1 UL 10016 PART_0004 PART_0015 Y
* 0 UL 10022 PART_0009 "" Y
* 1 UL 10024 PART_0013 PART_0009 Y
* 2 UL 10032 PART_0018 PART_0013 Y
* 0 UL 10029 PART_0014 "" Y
* 1 UL 10031 PART_0016 PART_0014 Y
* 2 UL 10032 PART_0018 PART_0013 Y <-
빨간색으로 강조된 부분이 주황색으로 이동 되어야 옳바른 쿼리인데 쿼리를 어떻게 수정해줘야 할지 모르겠습니다ㅠㅠ
SELECT CASE b.lv WHEN 0 THEN '*' END "0" , CASE b.lv WHEN 1 THEN '*' END "1" , CASE b.lv WHEN 2 THEN '*' END "2" , CASE b.lv WHEN 3 THEN '*' END "3" , CASE b.lv WHEN 4 THEN '*' END "4" , b.lv , a.* FROM pt_bom a , (SELECT 0 lv , t1.part_no , t1.part_parent , t1.part_no x FROM pt_bom t1 WHERE (t1.part_parent IS NULL OR t1.part_parent = '') UNION ALL SELECT 1 lv , t2.part_no , t2.part_parent , CONCAT(t1.part_no, t2.part_no) x FROM pt_bom t1 , pt_bom t2 WHERE (t1.part_parent IS NULL OR t1.part_parent = '') AND t2.PART_PARENT = t1.PART_NO UNION ALL SELECT 2 lv , t3.part_no , t3.part_parent , CONCAT(t1.part_no, t2.part_no, t3.part_no) x FROM pt_bom t1 , pt_bom t2 , pt_bom t3 WHERE (t1.part_parent IS NULL OR t1.part_parent = '') AND t2.part_parent = t1.part_no AND t3.part_parent = t2.part_no UNION ALL SELECT 3 lv , t4.part_no , t4.part_parent , CONCAT(t1.part_no, t2.part_no, t3.part_no, t4.part_no) x FROM pt_bom t1 , pt_bom t2 , pt_bom t3 , pt_bom t4 WHERE (t1.part_parent IS NULL OR t1.part_parent = '') AND t2.part_parent = t1.part_no AND t3.part_parent = t2.part_no AND t4.part_parent = t3.part_no UNION ALL SELECT 4 lv , t5.part_no , t5.part_parent , CONCAT(t1.part_no, t2.part_no, t3.part_no, t4.part_no, t5.part_no) x FROM pt_bom t1 , pt_bom t2 , pt_bom t3 , pt_bom t4 , pt_bom t5 WHERE (t1.part_parent IS NULL OR t1.part_parent = '') AND t2.part_parent = t1.part_no AND t3.part_parent = t2.part_no AND t4.part_parent = t3.part_no AND t5.part_parent = t4.part_no ) b WHERE a.part_no = b.part_no ORDER BY x ;
마농님 답변 달아주셔서 감사합니다.
Mysql 버전은 5.7.29-log 사용하고 있습니다.
알려주신 쿼리로 실행하니
0 | 1 | 2 | 3 | 4 | 자재 코드 | 품목코드 | 상위품목 |
---|---|---|---|---|---|---|---|
* | 10034 | 연필 | 없음 | ||||
* | 10035 | 나무 | 연필 | ||||
* | 10037 | 나무 | 색연필 | ||||
* | 10036 | 심 | 연필 | ||||
* | 10038 | 심 | 색연필 | ||||
* | 10040 | 색연필 | 없음 | ||||
* | 10037 | 나무 | 색연필 | ||||
* | 10035 | 나무 | 연필 | ||||
* | 10038 | 심 | 색연필 | ||||
* | 10036 | 심 | 연필 | ||||
* | 10039 | 색상 |
색연필 |
위와 같은 결과가 나오는데
0 | 1 | 2 | 3 | 4 | 자재 코드 | 품목코드 | 상위품목 |
---|---|---|---|---|---|---|---|
* | 10034 | 연필 | 없음 | ||||
* | 10035 | 나무 | 연필 | ||||
* | 10036 | 심 | 연필 | ||||
* | 10040 | 색연필 | 없음 | ||||
* | 10037 | 나무 | 색연필 | ||||
* | 10038 | 심 | 색연필 | ||||
* | 10039 | 색상 | 색연필 |
이렇게 결과가 나오게 쿼리를 작성하고 싶습니다.
어느 부분 쿼리를 참조를 하여 수정을 하면 좋은결과를 얻을수있을지 조언좀 부탁드립니다ㅠ
데이터는 이렇게 들어가 있습니다.
품목번호 부모품목번호
PART_0020 ""
PART_0021 PART_0020
PART_0022 PART_0020
PART_0021 PART_0023
PART_0022 PART_0023
PART_0024 PART_0023
PART_0023 ""
PART_0020 연필
PART_0021 나무
PART_0022 심
PART_0023 색연필
PART_0024 색상