Q&A

  • 파이어버드..쿼리질문입니다...
테이블 customs(거래처정보를 저장한 테이블), Datas(거래처의 거래내역을 저장한 테이블)
두테이블사이에는 customs의 code필드와 Datas의 Cust필드가 PK로..지정되어있습니다..
제가 원하는건 만약 사용자가 날짜조건을 "2002-05-10"일 부터 "2002-05-31"까지라고.지정했을때  
거래처별 전잔액,매출액,수금액,현잔액을 쿼리로 추출하고 싶습니다.
그래서 아래 쿼리문으로
//참고 ( datas.good는 상품코드입니다.. 상품코드가 ']'로 시작하면 수금, 아니면 매출 )

select code,name,bl,tel1,    
(select sum(amou) from datas where (datas.cust=customs.code) and (datas.good not like "]%") and (datas.fdate < "2002-05-10")) bin,      //"2002-05-10"일 전까지의 매출금액합계  
(select sum(amou) from datas where (datas.cust=customs.code) and (datas.good starting with "]") and (datas.fdate < "2002-05-10")) bou, //2002-05-10일 전까지의 수금금액합계
(select sum(amou) from datas where (datas.cust=customs.code) and (datas.good not like "]%") and (datas.fdate between "2002-05-10" and "2002-05-31")) tin,//기간중 매출금액합계
(select sum(amou) from datas where (datas.cust=customs.code) and (datas.good  starting with "]") and (datas.fdate between "2002-05-10" and "2002-05-31")) tou //기간중 수금금액합계
from customs

이렇게 하면..결과가 나오기는 하는데.......결과볼려면....잠이 밀려듭니다.(날씨탓인가??)
한숨자고 일어나도 될정도네요..(사용자에게..."한숨자고 보세요.".이렇게 말할수도없고^^;)
뭔가 다른 방법을 써야될것같은데....우찌해야될까요....
//참고2 (datas의 거래레코드수는 대략 100만 정도로..추산됩니다..)
혹시 다른 방법이 없을까요?? 부탁드립니다..
1  COMMENTS
  • Profile
    장태원 2003.04.01 19:30


    쿼리에 문제가 많습니다... 특히 테이블을 몇번을 돌리는지..쩝.. 그리고 like는 맞게 고쳐쓰셈..

    LIKE 의 난발은 속도저하의 큰 원인입니다.

    interbase 쿼리는 오랜만이라서 일단 오라클식으로 바꿔서 보여드리겠습니다.

    참고하셈.


    SELECT code,name,bl,tel1,
         , SUM( DECODE( datas.cust ,customs.code ,AMOU ,0) )
      FROM customs
         , datas
    WHERE customs.code = datas.cust

    이런식으로 필드절에서 함수를 이용하여 걸려주면 됩니다.

    인터베이스도 함수가 풍부하니 가능합니다.

    위의 예를 설명하자면,

    SUM( DECODE( datas.cust ,customs.code ,AMOU ,0) ) 는

    cust = code 일때만 Amou 를 Sum 하며 아니면 0을 Sum 을 합니다.

    따라서 조건에 따른 Sum 을 구할수 잇습니다.

    이렇게 하면 수십배 빠른 결과를 구할수 있을듯 하며, 수백반건이라도

    몇초안에 뜰거 같은데..ㅋㅋㅋ