database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40465 게시물 읽기
No. 40465
랜덤하게 배치해야하는 문제입니다. 마농님 도와주세요...
작성자
도끼발
작성일
2014-05-21 09:19ⓒ
2014-05-21 09:20ⓜ
조회수
7,414

 안녕하세요.. 자주 와서 공부하고 가는 개발자입니다.

다름이 아니라 이번에 큰 난관에 부딪혀서요...ㅜ.ㅜ   제품을 배분기에 배분해야하는 문제입니다.

스타일색상규격   형태의  패션제품인데요.

 

배분기는 1-98 번 까지 슈트가 있구요.. 슈트 하부에는 서브슈트가 있습니다.

1슈트 1슈트 1슈트 1슈트 1슈트  2슈트  2슈트                98슈트
 1-1 1-2  1-3  1-4  1-5   2-1 2-2                 
 red  black yellow   red  white  red  red 에러                

 

즉, 제품이 1번슈트에 5 색상별로 서브슈트에 배분됩니다.  그런데 한 슈트내 바로 옆 서브슈트 끼리는 색상이 달라야 해요....

그렇게 5개 서브슈트가 다 배분되면 다음 슈트로 순번 되어야 합니다.

즉,  이런 데이타가

WCT004 BK 090

WCT017 BK 090

WDW013 RE 090

WDW013 RE 095

WDW019 BE 090

WDW023 WI 100

WDW025 KH 085

 

이런 식으로 배분되어야 합니다.

제품            색상  규격   슈트   서브슈트

WDW013 RE 095       1         1

WDW025 KH 090       1         2

WCT001 MY 095       1         3

WDW023 WI 100       1         4

WDW025 KH 085       1         5

WCT004 BK 090       2         1

WDW013 RE 090       2         2

 

랜덤 Value 를 써도 색상이 바로 옆으로 배치될떄도 있고 해서 답이 안나옵니다...

마농님 도와주세요.... ㅜ.ㅜ

 

 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

WITH t AS
(
SELECT 1 pk, 'WCT001' prod, 'MY' color, '095' siz FROM dual
UNION ALL SELECT 2, 'WCT004', 'BK', '090' FROM dual
UNION ALL SELECT 3, 'WCT017', 'BK', '090' FROM dual
UNION ALL SELECT 4, 'WDW013', 'RE', '090' FROM dual
UNION ALL SELECT 5, 'WDW013', 'RE', '095' FROM dual
UNION ALL SELECT 6, 'WDW019', 'BE', '090' FROM dual
UNION ALL SELECT 7, 'WDW023', 'WI', '100' FROM dual
UNION ALL SELECT 8, 'WDW025', 'KH', '085' FROM dual
UNION ALL SELECT 9, 'WDW025', 'KH', '090' FROM dual
)
SELECT lv
     , REGEXP_SUBSTR(pk   , '[^,]+', 1, lv) pk
     , REGEXP_SUBSTR(prod , '[^,]+', 1, lv) prod
     , REGEXP_SUBSTR(color, '[^,]+', 1, lv) color
     , REGEXP_SUBSTR(siz  , '[^,]+', 1, lv) siz
     , CEIL(lv / 5) suit
     , MOD(lv-1, 5)+1 subsuit
  FROM (SELECT *
          FROM (SELECT LEVEL cnt
                     , SYS_CONNECT_BY_PATH(pk   , ',') pk
                     , SYS_CONNECT_BY_PATH(prod , ',') prod
                     , SYS_CONNECT_BY_PATH(color, ',') color
                     , SYS_CONNECT_BY_PATH(siz  , ',') siz
                  FROM t
                 WHERE LEVEL = (SELECT COUNT(*) FROM t)
                 --AND ROWNUM = 1 -- 원래 여기에 넣으려고 한건데, 느려서...
                 CONNECT BY NOCYCLE PRIOR pk != pk
                                AND PRIOR color != color
                )
         WHERE ROWNUM = 1 -- 여기에 넣으니 빨라지네요.
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 999)
 WHERE lv <= cnt
;

 

마농(manon94)님이 2014-05-21 16:19에 작성한 댓글입니다.
이 댓글은 2014-05-21 16:44에 마지막으로 수정되었습니다.

 아,... 너무 감사합니다..

^^

도끼발님이 2014-05-21 18:16에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40469오라클 SQL 또는 PL/SQL 질문입니다..몇일째 고생중.. [2]
월화수목금금금
2014-05-22
6812
404679i에서 REGEXP_REPLACE 사용할수 있는 방법 없나요? [1]
새터니
2014-05-22
8488
40466demo_proc.mk 파일 생성 또는 위치 문의
하정민
2014-05-21
6967
40465랜덤하게 배치해야하는 문제입니다. 마농님 도와주세요... [2]
도끼발
2014-05-21
7414
40464오라클 에러 로그(ora-04063)
디비초보
2014-05-20
8351
40463리눅스에서 테이블 스페이스 생성하기...
염정훈
2014-05-20
7222
40462outer join 조건에 대해 질문드립니다. [2]
coll
2014-05-19
7036
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다