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 40034 게시물 읽기
No. 40034
쿼리때문에..진도가 안나가요..
작성자
한상원(ennedi)
작성일
2013-03-04 18:12
조회수
6,069

안녕하세요..몇번을 쓰고 지우고 했네요...

아래 마농님이 답변주셨었는데...전체쿼리로 질문드려봅니다..

두개의 테이블(SCGOODTB, SCPRSTTB)에서 원가 / 매가 를 찾았었는데...

이제는 SCCOSTTB 테이블에서 기간내에 맞는 금액을 찾아서 넣어야 되는 문제가 생겼습니다.

SELECT /*+ Rule */
       a.gogocd 상품코드,      
       a.goinam + a.goinvt 원가,
       a.gootam + a.gootvt 매가
FROM SCGOODTB a,
             SCPRSTTB b
WHERE a.goshcd = :pis_shcd
      AND a.gocmyn = '0'                                /* 단품인 경우만 */
      AND a.gofeyn <> 'Y'                               /* 수수료상품이 아닌경우만 */
      AND ((a.goenyn <> '9') OR
           (a.goenyn =  '9' AND a.golarg =  '09'))
      AND a.goshcd = b.psshcd(+)
      AND a.gogocd = b.psgocd(+)
      AND a.gogocd = '2043258'

1-결과>

상품코드        원가      매가
2043258        2250    4500

새로 추가된 테이블

SELECT *
FROM SCCOSTTB
WHERE csgocd = '2043258'   
2-결과>

CSSHCD    코드         행사시작               행사종료        원가    매가
022149    2043258    20130117            99999999      2250            5000   
022149    2043258    20130119            20130228      2500            4500

SCGOODTB의 원가를 찾는게 아니고 2013-02-27일날 SELECT를 했을경우

행사기간 이기때문에 1-결과>의 원가가 2500이 나오게 하고 싶습니다. SELECT할때의

날짜가 행사기간이 아니라면 2250이 나와야겠죠..

이거를 어떻게 해야 기간내에 금액을 찾아서 붙일까요..?

너무 복잡하게 설명한것 아닌가 모르겠습니다.

좋은 하루보내세요

 

이 글에 대한 댓글이 총 3건 있습니다.
스칼라 서브쿼리를 사용하시면 될것 같네요.
 
-- sccosttb 테이블의 행사종료에 인데스가 없다면 사용
SELECT MAX(원가) KEEP(DENSE_RANK LAST ORDER BY 행사종료 DESC) 
  FROM sccosttb WHERE csgocd = a.gogocd  

-- sccosttb 테이블의 행사종료에 인데스가 있다면 사용
SELECT /*+ INDEX(sccosttb 인덱스명) */ 원가 
  FROM sccosttb WHERE csgocd = a.gogocd AND ROWNUM = 1


SELECT /*+ Rule */
       a.gogocd 상품코드,       
       a.goinam + a.goinvt 원가,
       a.gootam + a.gootvt 매가,
       (SELECT /*+ INDEX(sccosttb 인덱스명) */ 원가 
          FROM sccosttb WHERE csgocd = a.gogocd AND ROWNUM = 1) 행사원가
  FROM SCGOODTB a,
       SCPRSTTB b
WHERE a.goshcd = :pis_shcd
      AND a.gocmyn = '0'                                /* 단품인 경우만 */
      AND a.gofeyn <> 'Y'                               /* 수수료상품이 아닌경우만 */
      AND ((a.goenyn <> '9') OR
           (a.goenyn =  '9' AND a.golarg =  '09'))
      AND a.goshcd = b.psshcd(+)
      AND a.gogocd = b.psgocd(+)
      AND a.gogocd = '2043258'
아린(arin76)님이 2013-03-04 22:19에 작성한 댓글입니다.
이 댓글은 2013-03-04 22:24에 마지막으로 수정되었습니다.

글세요?
지난번 질문과 달라진게 없네요.
제가 궁금했던 사항도 그대로 남아 있구요.
왜? 2건중 1건이 선택되는지 명확한 이유가 필요합니다.
모호하게 행사중이기 때문이다라는 말로는 안됩니다.
왜냐하면 2건 모두 기간 조건을 만족하기 때문이죠.
중복 기간도 발생이 되구요.
기간 조건 외에 또다른 조건이 필요한데...
모호하게 행사중이라는 말 말고 좀더 명확한 이유를 설명해 주세요.

마농(manon94)님이 2013-03-05 10:02에 작성한 댓글입니다.

아..답변 감사합니다...여러 테이블에 값을 가져와서 여기저거

insert, update 하는데 그중에 값을 찾는 과정인데..최대한 쿼리를

간단하게 보여드리려고 한건데....제가 제대로 이해를 못시켜드리고 있네요...

죄송합니다...요즘 관리쪽으로 하다보니 쿼리 작성할 일이 거의 없다보니..

점점 어려워지고 있는것 같네요...

다시한번 아린(arin76)님, 마농(manon94)님 답변 감사합니다...

한상원(ennedi)님이 2013-03-06 16:30에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40037쿼리시 날짜 관련해서 질문 드립니다.. [1]
비만멍키
2013-03-05
5514
40036procedure내에서 view type 선언방법
초보디비
2013-03-05
5406
40035[질문]프로시져 안에서 BLOB 컴럼에 초기값을 셋팅하여 넣어주려고 합니다.
개발자A
2013-03-05
5105
40034쿼리때문에..진도가 안나가요.. [3]
한상원
2013-03-04
6069
40032전반기말과 전분기초 구하는 쿼리 질문 드립니다. [2]
다크써클
2013-03-01
7520
40031특정테이블 조회시 오류(ORA-00903), 도대체 원인을 모르겠어요ㅠㅠ [2]
Chloe
2013-02-28
12320
40030rollup으로 소계 계산후 가로에 소계표시하기 [1]
소계
2013-02-27
6945
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다