어제 올렸던 문제 못풀어서 다시올려봅니다... 너무어렵습니다 도와주세요 ㅜㅜ 0 10 2,794

by 재민띵 [2013.01.17 09:12:07]



select rownum,co180c.custnm, sc010d.mdl, mc010m.lay, mc010m.spec, mc010m.thick, sc010d.ioqty, sc010d.iodt,
CASE WHEN sc010d.ioqty >= mc010m.ctqty * ROWNUM

THEN mc010m.ctqty

ELSE sc010d.ioqty - mc010m.ctqty * (ROWNUM-1) END as ioqty
from sc010d, mc010m, co180c,
(SELECT rownum FROM mc010m, sc010d where sc010d.iocls = 'O' and sc010d.iono = :as_iono and rownum <= ceil(sc010d.ioqty/mc010m.ctqty)) test1

where sc010d.cust = co180c.cust
and sc010d.mdl = mc010m.mdl
and sc010d.iocls = 'O'
and sc010d.iono = :as_iono
order by rownum
이런 SQL문에서 유저가 원하는 만큼 앞쪽에 빈 ROW를 삽입할 수 있는 방법이 있을까요... 도움 부탁드립니다 ㅎ

by 아발란체 [2013.01.17 09:37:18]

올려주신 SELECT 결과 앞에 원하는 수 만큼의 빈줄 삽입하는 것? 이라면
진하게 쓴 부분만 추가하시면 됩니다.
여기서 10이라고 있는 숫자 부분을 변수로 받으면 됩니다.

SELECT '', '', '', '', '', '', '', '', '' FROM DUAL CONNECT BY LEVEL <= 10
UNION ALL

SELECT '', '', '', '', '', '', '', '', '' FROM DUAL
select
 rownum, co180c.custnm, sc010d.mdl, mc010m.lay, mc010m.spec, mc010m.thick, sc010d.ioqty, sc010d.iodt,
 CASE
  WHEN
   sc010d.ioqty >= mc010m.ctqty * ROWNUM
  THEN
   mc010m.ctqty
  ELSE
   sc010d.ioqty - mc010m.ctqty * (ROWNUM-1)
 END as ioqty
from
 sc010d, mc010m, co180c,
 (SELECT rownum FROM mc010m, sc010d where sc010d.iocls = 'O' and sc010d.iono = :as_iono and rownum <= ceil(sc010d.ioqty/mc010m.ctqty)) test1
where
 sc010d.cust = co180c.cust
 and sc010d.mdl = mc010m.mdl
 and sc010d.iocls = 'O'
 and sc010d.iono = :as_iono
order by
 rownum


by 재민띵 [2013.01.17 09:42:57]

ORA-01785: ORDER BY 항목은 SELECT 목록 식의 수라야 합니다 이라는 에러메세지가뜹니다..ㅠㅠ

by 마농 [2013.01.17 09:46:20]
-- 빈 값만 따로 조회되는 Select 문을 만들어서 Union All 로 합치시면 됩니다.
SELECT null AS rnum
     , null AS custnm
     , null AS mdl
     , null AS lay
     , null AS spec
     , null AS thick
     , null AS ioqty
     , null AS iodt
     , null AS ioqty
  FROM dual
 CONNECT BY LEVEL <= :n -- 원하는 행수를 입력
 UNION ALL
SELECT ...
 ORDER BY rnum NULLS FIRST
;

by 재민띵 [2013.01.17 09:53:29]

아발란체님 마농님 항상 감사합니다...ㅎㅎ
답을 알려주셧는데도 로직이 이해가안가네요 저문장공부해야겟어욤 ㅎㅎㅎㅎㅎㅎㅎ
근데..... 요즘말로 킹왕짱이신듯

by 재민띵 [2013.01.17 10:16:35]

혹시! :n의 값이 1or1아래일때는 빈로우를 삽입안할수있나요? case문이 안써지네요 ㅜㅜ

by 재민띵 [2013.01.17 10:17:01]
 아니지 그냥 :n<=1 이때 일거같습니당

by 마농 [2013.01.17 10:25:20]

재민띵님의 질문은 다른나라 언어 같아요.
알아 들을 수가 없어요.


by 재민띵 [2013.01.17 10:29:58]

만약 n의값이 0 or 1일 경우에도 무조껀 1로우가 추가되잖아요 ㅎㅎ
그러니까 2>=:n 이 조건시에만 위의 유니온문이 작동하도록 만들려구요 ㅎㅎ
1아래일때는 빈로우를 삽입하지않구욤 2이상일때만 ㅎㅎ


by 마농 [2013.01.17 10:44:50]
SELECT null
  FROM dual
 WHERE :n > 1
 CONNECT BY LEVEL <= :n
;

by 재민띵 [2013.01.17 12:20:45]

제가 바보엿네염 where :n>=2이걸하면되는데..ㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입