안녕하세요 SQL문의드립니다. 0 2 1,145

by lgxj [2022.05.20 16:43:02]


SELECT LEVEL,M.*
   FROM
   (
       SELECT 'A' AS COMP
             ,'N223' ST
             ,'76'  CO
             ,'105' SI
             ,3 QTY
        FROM DUAL
        UNION ALL
        SELECT 'A' AS COMP
             ,'N224' ST
             ,'76'  CO
             ,'100' SI
             ,1 QTY
        FROM DUAL
        UNION ALL
        SELECT 'A' AS COMP
             ,'N225' ST
             ,'76'  CO
             ,'095' SI
             ,2 QTY
        FROM DUAL        
    ) M
    CONNECT BY LEVEL < QTY
    ORDER BY ST,CO,SI;

제가 원하는건 QTY 수만큼만 데이타가 조회되는걸 알려고합니다.

결과 : 

COMP ST CO SI QTY
A N223 76 105 3
A N223 76 105 3
A N223 76 105 3
A N224 76 100 1
A N225 76 95 2
A N225 76 95 2

 

어떤식으로 해야될까요?

by 마농 [2022.05.20 16:50:47]

Connect by level 을 이용한 행 복제는 dual 처럼 1행인 집합에 적용하는 방법입니다.

위 M 처럼 다건에 바로 적용하면 안됩니다.

http://gurubee.net/article/55635


by 신이만든지기 [2022.05.20 17:46:27]
with tmp as (
SELECT 'A' AS COMP,'N223' ST,'76'  CO,'105' SI,3 QTY FROM DUAL UNION ALL
SELECT 'A' AS COMP ,'N224' ST ,'76'  CO,'100' SI,1 QTY  FROM DUAL UNION ALL
SELECT 'A' AS COMP ,'N225' ST ,'76'  CO ,'095' SI,2 QTY from DUAL)
select a.* 
  from tmp a,
      (
        select level as no
           from dual
          connect by level <= (select max(qty) from tmp)
      ) b
  where a.qty >= b.no
  order by a.st;

데이터 뻥튀기(행복사)에 주의하세요. 데이터가 많을 경우 장애가 발생할 수 있습니다.

a 테이블 row 갯수 *   a 테이블 max(qty) 만큼  데이터가 생성됩니다.

예 ) a 테이블  row 갯수 = 10,000개  /  a 테이블  max(qty) = 10,000개 인 경우 데이터가 1억 개 생성된 뒤, 필터링되어 나옵니다. 

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