Q&A

  • 빠른 답변 해주시길 부탁드립니다.[sql]
디비:오라클 델파이5.0



열두달을 4분기루 나눠서 그룹바이하는 쿼리를 쓸려고 하는데염....

간단하게 할수있는방법이나 노하우 있는분덜 갈켜주세염.....^^

필드명은 buyday이구염.....

date형입니다....

1,2,3=>1

4,5,6=>2

7,8,9=>3

10,11,12=>4이케할라믄.....어케해야하나염?

2  COMMENTS
  • Profile
    하눌이 2001.09.04 04:36
    노력중인 초보 wrote:

    > 디비:오라클 델파이5.0

    >

    > 열두달을 4분기루 나눠서 그룹바이하는 쿼리를 쓸려고 하는데염....

    > 간단하게 할수있는방법이나 노하우 있는분덜 갈켜주세염.....^^

    > 필드명은 buyday이구염.....

    > date형입니다....

    > 1,2,3=>1

    > 4,5,6=>2

    > 7,8,9=>3

    > 10,11,12=>4이케할라믄.....어케해야하나염?



    select sum(decode(sign(buyday-4),-1,amt,0)) bungi1,

    sum(decode(sign(buyday-7),-1,amt,0)-decode(sign(buyday-4),-1,amt,0)) bungi2,

    sum(decode(sign(buyday-10),-1,amt,0)-decode(sign(buyday-7),-1,amt,0)) bungi3,

    sum(amt-decode(sign(buyday-10),-1,amt,0)) bungi4

    from tablename



    이런식은 어떨지.. 될법도 한데...





  • Profile
    하얀까마귀 2001.09.04 00:22
    안녕하세요 하얀까마귀 입니다.



    약간 까다롭겠네요...



    아주 오래전에 사용한 방법중에서 커서 회피라는 말을 듣고 했던게 있습니다.



    조금 다르긴 한데.... 괜찮다면 써보세요.. 생각보다는 괜찮은 속도가 나왔던걸로



    기억합니다.



    이건 약간 설명을 하자면.. 특정한 계산이 필요한 쿼리의 경우



    대부분은 전체를 불러와서 임시테이블을 만들던지 아니면 계산을 하게 되는데..



    이렇게 되면 속도가 안나오죠..



    쿼리에서 해결을 하도록 한적이 있어요.. 서버의 부하가 좀 걸리긴 하지만. 문제가



    될정도는 아니였던걸로 기억합니다.



    님의 경우에.. ( 제가 디비안본지 1년반이 되어가서리 많이 까먹었거든요. 설명이



    미흡하더라도 양해를.. )



    날자에서 월을 가져오구요. 이넘을 4로 나눈값을 가져 올수 잇죠? 커리 함수에서요..



    ((month( buyday )-1) /3) <-- 요렇게 하면 분기별로 0,1,2,3, 가 나오죠..



    이값을 2사분기를 원한다면.. -2를 해서 부호에 대해 다시 절대값을 취하면 원하는



    분기는 0 나머지는1이 나옵니다. abs(((month( buyday )-1) /3) -2) 여기에 -1해서



    절대값을 다시 취하면 원하는분기는 1 나머지는 0가 나오죠.



    abs(abs(sign(((month( '05/01/2001' )-1) /3)-2))-1)



    에구에구 복잡하다.. 무지복잡해 보이죠???



    함수는 찾아보시구요..



    abs(abs(sign(((month( '05/01/2001' )-1) /3) -0 ))-1) // 1사분기

    abs(abs(sign(((month( '05/01/2001' )-1) /3) -1 ))-1) // 2사분기

    abs(abs(sign(((month( '05/01/2001' )-1) /3) -2 ))-1) // 3사분기

    abs(abs(sign(((month( '05/01/2001' )-1) /3) -3 ))-1) // 4사분기



    가 되겠죠?



    이걸 곱해주면 됩니다.. 계산을 해야 되는 값이. buymon 이라면..



    select buymon * abs(abs(sign(((month( '05/01/2001' )-1) /3) -0 ))-1) 일사분기,

    buymon * abs(abs(sign(((month( '05/01/2001' )-1) /3) -1 ))-1) 이사분기,

    buymon * abs(abs(sign(((month( '05/01/2001' )-1) /3) -2 ))-1) 삼사분기,

    buymon * abs(abs(sign(((month( '05/01/2001' )-1) /3) -3 ))-1) 사사분기



    from 테이블명

    where 조건.....



    이렇게 하시면 결과 한줄에 사분기 모두 값이 넘어오겠죠.. 이렇게 하시면 인덱스가



    그대로 적용되어서 풀스켄 하지 않아도 되구요...



    보기보다는 성능이 괜찮으니 애용해 보세요... 여러곳에 적용할수 있을겁니다..



    그럼..



    그럼 즐거운 시간 되시구요..



    - 하얀까마귀 -















    노력중인 초보 wrote:

    > 디비:오라클 델파이5.0

    >

    > 열두달을 4분기루 나눠서 그룹바이하는 쿼리를 쓸려고 하는데염....

    > 간단하게 할수있는방법이나 노하우 있는분덜 갈켜주세염.....^^

    > 필드명은 buyday이구염.....

    > date형입니다....

    > 1,2,3=>1

    > 4,5,6=>2

    > 7,8,9=>3

    > 10,11,12=>4이케할라믄.....어케해야하나염?