긴 텍스트 글자안에 있는 id를 이용해 다른 문자를 변경하는 로직관련 질문입니다. 1 2 647

by MS [SQL Query] [2021.11.01 23:31:15]


sam-B.png (28,954Bytes)

테이블이 2개 있는데 part_usage과 vc_feature 입니다. 실제 정보중 일부를 가져 왔는데요.

part_usage 테이블의 usage속성의 길이는 1000자 이상이 되는 경우도 많고 Partid의 수량도 3000개 이상입니다.

또한 vc_feature 테이블의 feature_list의 5자리 feature수량도 150개 이상입니다.

정상적인 방법으로는 속도를 만족시킬수 없어 여러가지 방법을 찾고 있고 그러는 과정중에 글자 변환 작업을 하고 있습니다.

혹시 전문가님들의 다른 생각이 있으시면 어떤 조언도 감사하게 받겠습니다.

 

그림을 먼저 참조 해주세요.

1. 첫번째 정보는 제품id(part)와 사용 조건을 결정하는 로직 정보(usage)입니다.

2. 두번째 테이블 정보는 제품의 변형품 id와 사용조건 항목 정보(usage)들 입니다.

feature라고 부르는 5자리 id는 part_usage 테이블의 usage 속성으로 관리됩니다 또한 vc_feature의 feature_list에서는 사용되는 id들 정보가 나타납니다.

 

input table: part_usage

seq Partid usage
1 P920 &13131&15205&12919&15297/15296&13043/12814&13626/13625/13628
2 P5383 &13131&15289&22100&13647&13517&13540
3 P28 &13131&15289&22100&13647&13518&13540
4 P2838 &13131&15289&22100&13648&13517&13540

 

input table: vc_feature

vc_id feature_list
VC1 13213,13215,13131,13233,13147,13116,13138,15299,15264,15228,15237
VC2 13213,13215,13233,13147,13116,13138,15289, 13647,15299,15264,15228,15237,15205,15210,15163,15124,15142,15082,15028,14997
VC3 13213,13215,13233,13147,13116,13138,15299,15264,15228,15237,15205,13540

 

중간 단계    
VC1 P920 &S&15205&12919&15297/15296&13043/12814&13626/13625/13628
VC1 P5383 &S&15289&22100&13647&13517&13540
VC1 P28 &S&15289&22100&13647&13518&13540
VC1 P2838 &S&15289&22100&13648&13517&13540
VC2 P920 &13131&15205&12919&15297/15296&13043/12814&13626/13625/13628
VC2 P5383 &13131&S&22100&S&13517&13540
VC2 P28 &13131&S&22100&S&13518&13540
VC2 P2838 &13131&S&22100&13648&13517&13540
VC3 P920 &13131&S&12919&15297/15296&13043/12814&13626/13625/13628
VC3 P5383 &13131&15289&22100&13647&13517&S
VC3 P28 &13131&15289&22100&13647&13518&S
VC3 P2838 &13131&15289&22100&13648&13517&S

 

마지막 단계에서는 feature id가 S로 매칭이 되지않은것은 - 표시해 줍니다.

마지막 단계 table: result    
VC1 P920 &S&-&-&-/-&-/-&-/-/-
VC1 P5383 &S&-&-&-&-&-
VC1 P28 &S&-&-&-&-&-
VC1 P2838 &S&-&-&-&-&-
VC2 P920 &-&-&-&-/-&-/-&-/-/-
VC2 P5383 &-&S&-&S&-&-
VC2 P28 &-&S&-&S&-&-
VC2 P2838 &-&S&-&-&-&-
VC3 P920 &-&S&-&-/-&-/-&-/-/-
VC3 P5383 &-&-&-&-&-&S
VC3 P28 &-&-&-&-&-&S
VC3 P2838 &-&-&-&-&-&S

 

 

 

 

 

by 마농 [2021.11.02 08:21:35]
SET DEFINE OFF;

WITH part_usage AS
(
SELECT 1 seq, 'P920' Partid, '&13131&15205&12919&15297/15296&13043/12814&13626/13625/13628' usage FROM dual
UNION ALL SELECT 2, 'P5383', '&13131&15289&22100&13647&13517&13540' FROM dual 
UNION ALL SELECT 3, 'P28'  , '&13131&15289&22100&13647&13518&13540' FROM dual
UNION ALL SELECT 4, 'P2838', '&13131&15289&22100&13648&13517&13540' FROM dual
)
, vc_feature AS
(
SELECT 'VC1' vc_id, '13213,13215,13131,13233,13147,13116,13138,15299,15264,15228,15237' feature_list FROM dual
UNION ALL SELECT 'VC2', '13213,13215,13233,13147,13116,13138,15289,13647,15299,15264,15228,15237,15205,15210,15163,15124,15142,15082,15028,14997' FROM dual
UNION ALL SELECT 'VC3', '13213,13215,13233,13147,13116,13138,15299,15264,15228,15237,15205,13540' FROM dual
)
SELECT b.vc_id
     , a.seq
     , a.Partid
     , REGEXP_REPLACE(REGEXP_REPLACE(a.usage
       , REPLACE(b.feature_list, ',', '|'), 'S')
       , '[0-9]{5}', '-') x
  FROM part_usage a
     , vc_feature b
 ORDER BY b.vc_id, a.seq
;

 


by MS [2021.11.02 09:15:27]

아침일찍 감사하게 해결해 주셨네요.

이렇게 짤끔하게 된다니 매번 신기하고 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입