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 38857 게시물 읽기
No. 38857
합계금액 추출 쿼리 질문 드려요
작성자
이순욱(soonuk)
작성일
2011-09-14 19:08
조회수
8,544

옵션 공급가 합계를 추가해서 뽑으려고 합니다.

상품옵션 상세의 합계를 가져오면 되는데 주문옵션의 옵션 상세 정보와 매칭 시키고 주문 메인 테이블의

상품 코드와 매칭해서 가져와야하는 번거로움이 있네요.

오류코드는 ORA-00937: 단일 그룹의 그룹 함수가 아닙니다 라고 나오네요

추가 하려는 부분에<<<코멘트>>> 이런식으로 코멘트를 달았습니다.

감사 합니다 (__

SELECT SELL_AMT_SUM
       /*매출(총판매금액)*/
       ,
       OPRCO_CHRG_AMT
       /*쿠폰액(운영사부담액)*/
       ,
       SALE_R
       /*실매출(총판매금액 - 배송비 - 쿠폰액)*/
       ,
       SELL_AMT
       /*(매출)판매금액*/
       ,
       SELL_TAX
       /*(매출)세액*/
       ,
       SPL_AMT_SUM
       /*총공급가*/
       ,
       SPL_AMT
       /*공급가액*/
       ,
       SPL_TAX
       /*세액*/
       ,
    OPT_SPL_AMT
       /*옵션공급가 <<<추가해서 뽑으려는 값 입니다(OPT_SPL_AMT)>>>*/
       ,
       DLV_AMT
       /*배송비*/
       ,
       SPLCO_CHRG_AMT
       /*쿠폰사용금액*/
       ,
       SPL_AMT_TOTAL
       /*총공급가(매입)*/
       ,
       GOOD_NM
       /*옵션공급가*/
       ,
       (SELL_AMT - OPRCO_CHRG_AMT) - (SPL_AMT + DLV_AMT - SPLCO_CHRG_AMT) AS MARGIN_AMT
       /*마진금액 */
  FROM
       (SELECT SUM(SELL_AMT_SUM) AS SELL_AMT_SUM ,
              SUM(OPRCO_CHRG_AMT) AS OPRCO_CHRG_AMT ,
              SUM(SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT) AS SALE_R ,
              ROUND(SUM( DECODE (TX_TXFR_FG, '047001', (SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT) / 1.1 , '047002', SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT)) ) AS SELL_AMT ,
              ROUND(SUM( (SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT) - (DECODE (TX_TXFR_FG, '047001', (SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT) / 1.1 , '047002', SELL_AMT_SUM - DLV_AMT - OPRCO_CHRG_AMT) ) ) ) AS SELL_TAX ,
              SUM(SPL_AMT_SUM) AS SPL_AMT_SUM ,
              ROUND(SUM( DECODE (TX_TXFR_FG, '047001', SPL_AMT_SUM / 1.1 , '047002', SPL_AMT_SUM)) ) AS SPL_AMT ,
              ROUND(SUM( (SPL_AMT_SUM) - (DECODE (TX_TXFR_FG, '047001', SPL_AMT_SUM / 1.1 , '047002', SPL_AMT_SUM) )) ) AS SPL_TAX
              ,
            -- <<<추가해서 뽑으려는 값 입니다(OPT_SPL_AMT)>>>시작             
             (SELECT NVL(SUM(kk.OPT_AMT_SPL),0)
               FROM 상품옵션상세 kk,
                    주문옵션 yy
              WHERE kk.good_cd=yy.good_cd
                    AND yy.opt_dtl_no = kk.opt_dtl_no
                    AND NU.GOOD_CD=kk.good_Cd    
                    GROUP BY kk.OPT_AMT_SPL-- ,yy.opt_dtl_no         
             ) ||'/'|| SUM(NU.PRN_AMT) AS OPT_SPL_AMT ,
            -- <<<추가해서 뽑으려는 값 입니다(OPT_SPL_AMT)>>>  끝, 결과물은 3000/20 이런 식으로 추출 하려 합니다      

       
              SUM(DLV_AMT) AS DLV_AMT ,
              SUM(SPLCO_CHRG_AMT) AS SPLCO_CHRG_AMT ,
              SUM(SPL_AMT_SUM + DLV_AMT - SPLCO_CHRG_AMT) AS SPL_AMT_TOTAL ,
              CASE
                  WHEN COUNT(*) > 1
                  THEN MAX(GOOD_NM) || ' 외'
                  ELSE MAX(GOOD_NM)
              END AS GOOD_NM --,
              --GOOD_CD AS GOOD_CD ,
             -- sum(PRN_AMT) AS PRN_AMT
         FROM
              (SELECT NVL(a.SELL_AMT_SUM, 0) AS SELL_AMT_SUM ,
                     NVL(b.OPRCO_CHRG_AMT, 0) AS OPRCO_CHRG_AMT ,
                     a.TX_TXFR_FG AS TX_TXFR_FG ,
                     NVL(a.SPL_AMT_SUM, 0) AS SPL_AMT_SUM ,
                     DECODE(a.dlv_amt_stl_fg, '049002', 0, '049001', NVL(a.DLV_AMT, 0), '0') AS DLV_AMT ,
                     NVL(b.SPLCO_CHRG_AMT, 0) AS SPLCO_CHRG_AMT ,
                     a.GOOD_NM AS GOOD_NM , --<<<추가 쿼리 위해 셀렉트>>>
                     a.GOOD_CD AS GOOD_CD ,  --<<<추가 쿼리 위해 셀렉트>>>
                     NVL(a.PRN_AMT,0) AS PRN_AMT
                FROM 주문 a
                 LEFT OUTER JOIN
                     (SELECT *
                       FROM 발급쿠폰
                      WHERE USE_YN = '0'
                            AND
                            (
                                USE_DT BETWEEN '20110814' AND '20110914'
                            )
                     ) b
                     ON a.ORDR_MBRNO = b.MBRNO
                     AND a.CPN_ISS_DT = b.CPN_ISS_DT
                     AND a.CPN_SEQ = b.CPN_SEQ
               WHERE SPL_BCO_CD = '0010000001'
                     AND TX_TXFR_FG = '047001'
                     AND a.ORDR_STTS IN ('032008', '032009', '032032', '032033', '032034', '032035', '032036', '032037', '032038', '032039', '032058')
                     AND getdatestts (a.ORDR_NO, '032008') >= '20110814'
                     AND getdatestts (a.ORDR_NO, '032008') <= '20110914'
              ) NU
       ) ZZ 

 

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

 엥?

 

NVL(SUM(kk.OPT_AMT_SPL),0)

 

인데

 

GROUP BY kk.OPT_AMT_SPL

 

해주시면... ^^:  다건이 나오지요...

이용운(cloudlyu)님이 2011-09-15 09:01에 작성한 댓글입니다.

(SELECT NVL(SUM(kk.OPT_AMT_SPL),0)
               FROM 상품옵션상세 kk,
                    주문옵션 yy
              WHERE kk.good_cd=yy.good_cd
                    AND yy.opt_dtl_no = kk.opt_dtl_no
                    AND NU.GOOD_CD=kk.good_Cd    
                    GROUP BY kk.OPT_AMT_SPL-- ,yy.opt_dtl_no         
             )

문제1. 이용운님이 말한대로 단건이 나올수도 다건이 나올수도 있겠네요. (여러행이 리턴되었다는 에러가 나올겁니다.)

문제2. 단건이 나오더라도 집계함수가 사용되지 않았기때문에 단일 그룹함수가 아닙니다.라는 에러가 나오겠네요.

sdf님이 2011-09-15 09:12에 작성한 댓글입니다. Edit

네 맞습니다.

어떤걸로 그룹바이 해도 단건이 나올수도 다건이 나올수도 있는 상황이구요

본문에 group by 한 amt 합계금액은 틀린거구요

group by를 구지 한다면 업체코드로 해야 할거 같은데..sql자체가 한업체에 대한 쿼리라 사실상 그룹바이를 돌릴만한게 없어요

ㅠㅠ

이순욱님이 2011-09-15 09:24에 작성한 댓글입니다. Edit

GROUP BY 구문을 제거하라고 말씀 드린겁니다.

GROUP BY 구문을 제거하면 쿼리결과 전체에 대한 집계값이 나옵니다.

 

하지만 당연해도 필요하다면 구문은 넣어주는게 소스 파악하기에는 유리합니다.

암비님이 2011-09-15 09:33에 작성한 댓글입니다. Edit

처음에 그룹바이를 안줫다가 에러나서 넣었던던건데

쿼리를 다시 짜서 해결 했네요...관심가져주신분들 감사 합니다

이순욱(soonuk)님이 2011-09-15 10:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38860where 절에서 in 구문.. [2]
아폴론
2011-09-15
4271
38859비효율적인 쿼리 튜닝 부탁드립니다. [2]
jinkuidong
2011-09-15
6334
38858유닉스 오라클에서 윈도우 서버 오라클로 이전 [3]
임두환
2011-09-14
5053
38857합계금액 추출 쿼리 질문 드려요 [5]
이순욱
2011-09-14
8544
38856시설사용신청 [1]
궁금합니다.
2011-09-14
4080
38855모델링 질문입니다. [1]
저글링
2011-09-14
3720
38854특정조건 만족하는 칼럼의 카운트? [2]
강영호
2011-09-13
3762
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다