Q&A

  • 디비에 저장된 데이터가 필드로...
판매 테이블이 다음과 같이 있습니다.

물건  세금발행     금액
-------------------------
A      발행      20,000
B     미발행     15,000
C     미발행     20,000
A      발행      10,000
D      발행      20,000


이럴때 다음과 같은 검색을 할려고 합니다.

물건  발행   미발행     총금액
----------------------------------
A    발행                30,000
B              미발행  15,000
C             미발행   20,000
D    발행              10,000  
E    발행              2 0,000

세금발행 필드의 경우 발행 또는 미발행의 값만 저장될수 있습니다.
디비로는 인터베이스를 사용하고 있는데
UNION ALL을 사용하니까 세금발행 필드 하나에 발행 미발행 값만 들어오더라구요.
자세한 방법좀 알려주세요.
그럼 수고하세요..
2  COMMENTS
  • Profile
    표경만 2006.02.10 00:10
    테이블 Name 이 '판매테이블' 이라 할때
    Union All을 사용 하셨다면

        SELECT 물건, 세금발행, 금액 From 판매테이블
          where 세금발행 = '발행'
         union all
        SELECT 물건, 세금발행, 금액 From 판매테이블
          where 세금발행 = '미발행';

    이렇게 쿼릴 하신걸로 추정돼네요. 이결과를 보면

    물건  세금발행     금액
    -------------------------
    A      발행      20,000
    A      발행      10,000
    D      발행      20,000

    +

    물건  세금발행     금액
    -------------------------
    B     미발행     15,000
    C     미발행     20,000

    =

    물건  세금발행     금액
    -------------------------
    A      발행      20,000
    A      발행      10,000
    D      발행      20,000
    B     미발행     15,000
    C     미발행     20,000

    이런 결과가 나오네요 세금발행 필드를 발행과 미발행으로 분리해야 합니다.

    union all 을 사용해서 하신다면 다음과 같이 해보세요

    세금발행 필드를 발행, 미발행 필드명으로 분리하여 쿼리합니다.

        SELECT 물건, 세금발행 as 발행, '' as 미발행, 금액 From 판매테이블
         where 세금발행 = '발행'
         union all
        SELECT 물건, '' AS 발행, 세금발행 AS 미발행, 금액 From 판매테이블
         where 세금발행 = '미발행'


    물건  발행   미발행       금액
    ------------------------------------------
    A      발행              20,000
    A      발행              10,000
    D      발행              20,000

    +

    물건  발행   미발행       금액
    ------------------------------------------
    B               미발행   15,000
    C               미발행   20,000

    =

    물건  발행   미발행       금액
    ------------------------------------------
    A      발행               20,000
    A      발행               10,000
    D      발행               20,000
    B               미발행   15,000
    C               미발행   20,000



    다른 방법으로는 오라클은 Decode 문장으로, MS-Sql 은 Case 문장으로 UNION ALL 을 사용하지 않고
    쿼리를 할수 있습니다.   인터베이스는 사용해본적이 없어서 제공하는지를 잘 모르겠네요.

    참고사항으로 적어봤습니다.

      <오라클>
       SELECT 물건, DECODE(세금발행,'발행',세금발행,NULL) 발행,
                           DECODE(세금발행,'미발행',세금발행,NULL) 미발행,  금액
           From 판매테이블

      DECODE(세금발행,   '발행'   ,   세금발행   ,    NULL   )
    ---------------------------------------------------------------
        세금발행 필드의 데이타가 '발행' 일경우 참이면 세금발행필드의 데이타를 가져오고,
                                                               거짓이면 NULL 을 리턴합니다.


    <ms-sql>
       SELECT 물건, CASE 세금발행 WHEN '발행' THEN 세금발행 END AS  발행,
                           CASE 세금발행 WHEN '미발행' THEN 세금발행 END AS  미발행,  금액
           From 판매테이블
        
    금액 합산 group by추가로 가능하시겠죠?

    테스트까진 못해보았고, 기억이 나는데로 작성해봤습니다.

    도움돼셨기를....



  • Profile
    하수경 2006.02.10 19:54
    접근할수 있는 방법을 알려주셔서 감사합니다..


    SELECT 물건, 세금발행 as 발행, '' as 미발행, 금액 From 판매테이블
    where 세금발행 = '발행'
    union all
    SELECT 물건, '' AS 발행, 세금발행 AS 미발행, 금액 From 판매테이블
    where 세금발행 = '미발행'

    IB콘솔창에서 위의 sql문을 실행시켜봤는데요..
    데이터타입이 틀려서 접근이 안된다는  오류가 나오는거 같거든요..
    세금발행필드의 경우 varchar타입이구요..
    프로그램 하나를 똑같이 만들고 있는건데..
    그 프로그램 만든 사람은 도대체 어케 한건지..ㅜㅜ