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
운영게시판
최근게시물
MS-SQL Q&A 1766 게시물 읽기
No. 1766
다중 함수 사용 시 속도 문제
작성자
이정우(jeongwoo2)
작성일
2005-02-02 12:02
조회수
4,296

아래와 같이 함수를 많이 사용

해서 그런지

 

속도가 장난 아니게 늦어요

...

 

뭐 좋은 방법이 없을

까요

 

 

 

/* ※

// 판매구분 (SALEGBN) : 01=소매, 02=도매, 03=인터넷, 04=재고이동


// 의뢰STATUS : 1 =의뢰, 2 =진행, 3 = 반려 , 4=취소

,5=완료

// 입고 확인 : 1=입고대기, 2=부분입고, 3=추가입고,

5=입고확인

 

// 판매상태(STATUS ) : 1=

선결제 , 2 = 일반

// 품목구분(proggbn2) :01=도서 ,02=음반 ,03=용품 ,04=S/W

, 05=A/B

// 제품구분(proggbn1) :01=제품 ,02=상품 ,03=수입상품

// 출고구분(outgbn) : 1=정상 , 2=증정 , 3=반품

 


판매기본[SALEMST] 판매상세 [SALEDET]

판매내역[PAYMST]


사업장 pk 사업장 pk

사업장 pk

판매일자 pk 판매일자 pk

판매일자 pk

판매번호 pk 판매번호 pk

판매번호 pk

판매구분 판매순번 pk 순번

pk

판매상태 품목코드 = ISBN + SEQ (품목정보의)

택배비

판매수량

운송비

판매금액

가입비

출고구분

봉투보증금



품목정보[PRODUCT]

ISBN

SEQ

 

제품구분(proggbn1)

품목구분(proggbn2)

 

매장판매(인터넷판매제외)

인터넷판매

-------------------------------------------------------------------------------------------------------------


구분 | 정상판매 | 선결제 판매 |

정상판매 | 선결제 판매

| 총수 수량 금액 | 총수 수량 금액 | 총수 수량

금액 | 총수 수량 금액

----------------------------------------------------------|--------------------------------------------------

 

1 |판매 | | |

|

국내도서 |증정 | | |

|

|반품 | | |

|

|소계 | | |

|

----------------------------------------------------------|--------------------------|------------------------

 

2 |판매 | | |

|

수입도서|증정 | | |

|

|반품 | | |

|

|소계 | | |

|

--------------------------------------|-------------------|--------------------------|------------------------

 

3 |판매 | | |

|

음반 |증정 | | |

|

|반품 | | |

|

|소계 | | |

|

--------------------------------------|-------------------|--------------------------|------------------------

 

4 |판매 | | |

|

용품 |증정 | | |

|

|반품 | | |

|

|소계 | | |

|

--------------------------------------|-------------------|--------------------------|------------------------


|판매 | | |

|

|증정 | | |

|

6 |반품 | | |

|

S/W |소계 | | |

|

-------------------------------------|-------------------|--------------------------|------------------------

 

회원가입비 | | |

|

택배비 | | |

|

운송비 | | |

|

---------------------------------------------------------|---------------------------------------------------

 

합 계 | | |

|

-------------------------------------------------------------------------------------------------------------

 


인터넷 판매분과 정상 판매분의 구분 하기를 요청 함.

 

 

 

하여

 

 

SELECT A.CPNYCD ,

/* 1 매장 판매 국내도서 */

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201021' THEN A.PRODCD END) CNT11, /*일반/국내도서/판매

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201022' THEN A.PRODCD END) CNT12, /*일반/국내도서/증정

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201023' THEN A.PRODCD END) CNT13, /*일반/국내도서/반품

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1

WHEN '20102' THEN A.PRODCD END) CNT14, /*일반/국내도서/소계 */


COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101021' THEN A.PRODCD END) CNT15, /*선결제/국내도서/판매

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101022' THEN A.PRODCD END) CNT16, /*선결제/국내도서/증정

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101023' THEN A.PRODCD END) CNT17, /*선결제/국내도서/반품

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1

WHEN '10102' THEN A.PRODCD END) CNT18, /*선결제/국내도서/소계 */


ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201021' THEN A.SALEQTY END),0) QTY11, /*일반/국내도서/판매

*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201022' THEN A.SALEQTY END),0) QTY12, /*일반/국내도서/증정

*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201023' THEN A.SALEQTY END),0) QTY13, /*일반/국내도서/반품

*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101021' THEN A.SALEQTY END),0) QTY14, /*일반/국내도서/소계 */


ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101022' THEN A.SALEQTY END),0) QTY15, /*선결제/국내도서/판매

*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101023' THEN A.SALEQTY END),0) QTY16, /*선결제/국내도서/증정

*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201021' THEN A.KSALEAMT - A.PREAMT END),0) AMT11,

/*일반/국내도서/판매금액*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201023' THEN A.KSALEAMT - A.PREAMT END),0) AMT13,

/*일반/국내도서/반품금액*/

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101021' THEN A.PREAMT END),0) AMT14,

ISNULL(SUM( CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101023' THEN A.PREAMT END),0) AMT16 ,

 

0 icnt......

 

FROM SALEDET A, SALEMST B,

PRODUCT C,

(SELECT ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.ENTERAMT

END),0) ENTERAMT1, /*일반/회원가입비 */

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.ENTERAMT

END),0) ENTERAMT2, /*선결제/회원가입비*/

ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.TRANSAMT

END),0) TRANSAMT1, /*일반/택배비 */

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.TRANSAMT

END),0) TRANSAMT2, /*선결제/택배비 */

ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.FTRANAMT

END),0) FTRANAMT1, /*일반 /운송비 */

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.FTRANAMT

END),0) FTRANAMT2 /*선결제/운송비 */

FROM SALEPAY A, SALEMST B

WHERE A.CPNYCD = B.CPNYCD

AND A.SALEYMD = B.SALEYMD

AND A.SALENO = B.SALENO

AND A.CPNYCD = '01'

AND B.SALEGBN LIKE '%'

AND B.SALEGBN <> '03'

AND A.SALEYMD >= '20050131'

AND A.SALEYMD <= '20050131'

AND B.STATUS IN ('1','2')

AND NOT EXISTS ( SELECT SALENO FROM SALEDET

WHERE CPNYCD = B.CPNYCD

AND SALEYMD = B.SALEYMD

AND SALENO = B.SALENO

AND CPNYCD = '01'

AND SALEYMD >= '20050131'

AND SALEYMD <= '20050131'

AND SALEGBN LIKE '%'

AND SALEGBN <> '03'

AND DELYN = 'Y') ) D

WHERE A.CPNYCD = B.CPNYCD

 

AND A.SALEYMD =

B.SALEYMD

AND A.SALENO = B.SALENO

AND A.PRODCD = C.ISBNCD + C.SEQ

AND A.CPNYCD = '01'

AND A.SALEYMD >= '20050131'

AND A.SALEYMD <= '20050131'

AND B.SALEGBN LIKE '%'

AND B.SALEGBN <> '03'

AND B.STATUS IN ('1','2')

AND A.DELYN = 'N'

GROUP BY A.CPNYCD

UNION ALL

 

SELECT A.CPNYCD ,

 

0 CNT11 ......

 

/* 인터넷 국내도서 */

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201021' THEN A.PRODCD END) iCNT11, /*일반/국내도서/판매

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201022' THEN A.PRODCD END) iCNT12, /*일반/국내도서/증정

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '201023' THEN A.PRODCD END) iCNT13, /*일반/국내도서/반품

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1

WHEN '20102' THEN A.PRODCD END) iCNT14, /*일반/국내도서/소계 */


COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101021' THEN A.PRODCD END) iCNT15, /*선결제/국내도서/판매

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101022' THEN A.PRODCD END) iCNT16, /*선결제/국내도서/증정

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN

WHEN '101023' THEN A.PRODCD END) iCNT17, /*선결제/국내도서/반품

*/

COUNT(DISTINCT CASE B.STATUS+C.PROGGBN2+C.PROGGBN1

WHEN '10102' THEN A.PRODCD END) iCNT18, /*선결제/국내도서/소계 */


ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'201021' THEN A.SALEQTY END),0) iQTY11, /*일반/국내도서/판매

*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'201022' THEN A.SALEQTY END),0) iQTY12, /*일반/국내도서/증정

*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'201023' THEN A.SALEQTY END),0) iQTY13, /*일반/국내도서/반품

*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'101021' THEN A.SALEQTY END),0) iQTY14, /*일반/국내도서/소계 */


ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'101022' THEN A.SALEQTY END),0) iQTY15, /*선결제/국내도서/판매

*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'101023' THEN A.SALEQTY END),0) iQTY16, /*선결제/국내도서/증정

*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'201021' THEN A.KSALEAMT - A.PREAMT END),0) iAMT11,

/*일반/국내도서/판매금액*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'201023' THEN A.KSALEAMT - A.PREAMT END),0) iAMT13,

/*일반/국내도서/반품금액*/

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'101021' THEN A.PREAMT END),0) iAMT14,

ISNULL(SUM(CASE B.STATUS+C.PROGGBN2+C.PROGGBN1+A.OUTGBN WHEN

'101023' THEN A.PREAMT END),0) iAMT16

 

FROM SALEDET A, SALEMST B,

PRODUCT C,

(SELECT ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.ENTERAMT

END),0) ENTERAMT1, /*일반/회원가입비 */

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.ENTERAMT

END),0) ENTERAMT2, /*선결제/회원가입비*/

ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.TRANSAMT

END),0) TRANSAMT1,

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.TRANSAMT

END),0) TRANSAMT2,

ISNULL(SUM(CASE B.STATUS WHEN '2' THEN A.FTRANAMT

END),0) FTRANAMT1,

ISNULL(SUM(CASE B.STATUS WHEN '1' THEN A.FTRANAMT

END),0) FTRANAMT2

FROM SALEPAY A, SALEMST B

WHERE A.CPNYCD = B.CPNYCD

AND A.SALEYMD = B.SALEYMD

AND A.SALENO = B.SALENO

AND A.CPNYCD = '01'

AND B.SALEGBN = '03'

AND A.SALEYMD >= '20050131'

AND A.SALEYMD <= '20050131'

AND B.STATUS IN ('1','2')

AND NOT EXISTS ( SELECT SALENO FROM SALEDET

WHERE CPNYCD = B.CPNYCD

AND SALEYMD = B.SALEYMD

AND SALENO = B.SALENO

AND CPNYCD = '01'

AND SALEYMD >= '20050131'

AND SALEYMD <= '20050131'

AND SALEGBN = '03'

AND DELYN = 'Y') ) D

WHERE A.CPNYCD = B.CPNYCD

AND A.SALEYMD = B.SALEYMD

AND A.SALENO = B.SALENO

AND A.PRODCD = C.ISBNCD + C.SEQ

AND A.CPNYCD = '01'

AND A.SALEYMD >= '20050131'

AND A.SALEYMD <= '20050131'

AND B.SALEGBN = '03'

AND B.STATUS IN ('1','2')

AND A.DELYN = 'N'

GROUP BY A.CPNYCD

 

 

 

 

 

 

 

 

 

[Top]
No.
제목
작성자
작성일
조회
1769인용부호 에러입니다.
안풀리네
2005-02-03
4389
1768초보입니다. 넘 답답해서 이렇게 컴럼 삽입에 대해서 [2]
우철호
2005-02-02
3770
1767[무료세미나]MS SQL Server 2000 성능튜닝 세미나
김혜정
2005-02-02
3296
1766다중 함수 사용 시 속도 문제
이정우
2005-02-02
4296
1765MS-SQL 에서 mysql 의 LAST_INSERT_ID() 와 같은 역활을 하는 함수는? [3]
이지환
2005-02-01
8874
1764구문이 왜 잘못 되었다는 걸까요? [1]
서준용
2005-02-01
3019
1763오라클에서 사용하는 over(partition by ) 함수를 mssql에서 사용이 가능한가요? [3]
남상우
2005-02-01
6354
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다