Q&A

  • 나이별로 출력할수 있는 쿼리를 만들수 있나요?
고객테이블 필드
----------------
고객번호
나이

판매테이블
----------
고객번호
판매번호
물품이름
판매금액


출력내용
------------------------
나이          인원(명)     판매건수     매출액    %
10대이하  
10대
20대
30대
40대
50대
60대
70대
80대
90대
90대이상
-----------------------------------------------------
합계

이렇게 출력할수 있게 쿼리를 만들수 없나요?
부탁드리겠습니다
4  COMMENTS
  • Profile
    KDDG_Hoya 2002.10.25 06:45
    MS SQL에서 CASE문 활용입니다.
    select [나이], count(*) as 건수, sum(판매가격) as 판매가격, round(sum(판매가격)/총판매액*100, 0) as [%(비율)] from
      (select 고객번호, [나이] = case
                        when [나이] < 10 then '10대이하'
                        when ([나이] >= 10)  and ([나이] < 20 ) then '10대'
                        when ([나이] >= 20)  and ([나이] < 30 ) then '20대'
                        when ([나이] >= 30)  and ([나이] < 40 ) then '30대'
                        when ([나이] >= 40)  and ([나이] < 50 ) then '40대'
                        when ([나이] >= 50)  and ([나이] < 60 ) then '50대'
                        when ([나이] >= 60)  and ([나이] < 70 ) then '60대'
                        when ([나이] >= 70)  and ([나이] < 80 ) then '70대'
                        when ([나이] >= 80)  and ([나이] < 90 ) then '80대'
                        when ([나이] >= 90)  and ([나이] < 100 ) then '90대'
                         else '100대 이상' end  from 고객테이블) as table1
      inner join
        판매테이블  on table1.고객번호 = 판매테이블.고객번호
      inner join (select sum(판매가격) as 총판매액 from 판매테이블) as table2
    ) as table3
      group by [나이]

    집에서 함 만들어 봤는데.. 도움이 될지는 모르겠습니다.
    ㅡㅡ; 수고하세여....


      
  • Profile
    박장용 2002.10.25 00:53

    SELECT DECODE(S.jen,0,'10대이하'
                       ,1,'10대'
                       ,2,'20대'
                       ,3,'30대'
                       ,4,'40대'
                       ,5,'50대'
                       ,6,'60대'
                       ,7,'70대'
                       ,8,'80대'
                       ,9,'90대'
                        ,'90대이상')Jene,
           S.curcnt,
           S.salecount,
           S.saleamt,
           ROUND(((saleamt)/T.total)*100,2)per
    FROM                
    (SELECT SUM(AMT) total FROM TSale)T,
    (SELECT TRUNC(C.AGE/10)Jen,
            COUNT(DISTINCT C.CUSTOMER)curCnt,
            COUNT(*)saleCount,
            SUM(S.AMT)saleAmt
       FROM TCustomer C,
            TSale S
      WHERE C.CUSTOMER=S.CUSTOMER
      GROUP BY TRUNC(C.AGE/10)
    )S
    ORDER BY S.jen        


  • Profile
    KDDG_ZZOM 2002.10.24 19:37
    데이타베이스에 따라 명령어가 다르겠지만... 아래쿼리는
    프로시져를 하나 만들어서 사용하시는게 제일 편할것같네요...
    인포믹스의 case문은 그래도 쉽게 구현할수있을것같은데 오라클은 decode문만 가지고는 힘들것같네요...

    꺙 나이를 넘겼을때 해당되는 나이대를 리턴하는 프로지져를 생성하시고 그걸가지고 사용하시는건 어떨지...

    즐프하세요.


  • Profile
    정성훈 2002.10.24 19:37
    안녕하세요.
    100살 넘는 분 잇으면 ㅡ.ㅡ 100대까지 가는건데 90대이상에서 끝내시려면
    조건다시거나, 유니온으로 추가하시면 될거 같아요...
    제가 할수 잇는 방법은 아래같은거라..참고하세요..
    ms-sql 7.0 에서 한것입니다.

    SELECT A.나이
          ,ISNULL(SUM(A.금액),0)
    FROM ( //나이별로
                   SELECT A.나이 / 10 나이
                 ,ISNULL(B.금액,0) 금액
                      FROM 고객테이블
                     LEFT OUTER JOIN 판매테이블 B
                         ON (A.고개번호 = B.고객번호)            
          ) A
    GROUP BY A.나이