2012-02-17 3 views
0

데이터베이스에 설정된 방식으로 수행 할 수없는 쿼리에 문제가 있습니다. 기본적으로, 내 쿼리에는 두 개의 다른 테이블이 사용됩니다. 트랜잭션 및 티켓 가격을 가정 해 봅시다. 그들은 (일부 샘플 데이터)과 같이 :쿼리에서 두 테이블 결합 및 그로부터 새 열 만들기

TRANSACTIONS 
    Transation ID | Ticket Quantity | Total Price | Salesperson | Ticket Price ID 
     5489    250   250   Jim    8765 
     5465    50    150   Jim    1258 
     7898    36    45    Ann    4774 


    Ticket Prices 
    Ticket Price ID | Quantity | Price | Bundle Name 
     8765   1   1   1 ticket, $1 
     4774   12   15  5 tickets, $10 
     1258   1   3   1 ticket, $3 

은 내가 무엇을 목표로하고있어 번들 유형에 따라 각 영업 사원의 판매를 분해하는 보고서입니다. 결과 테이블은 다음과 같이해야한다 :

Sales Volume/Salesperson 
Name | Bundle A | Bundle B | Bundle C | Total 
Jim  250   0   50  300 
Ann  0   36   0  36 

내가 웹 검색 있었고, 그것은 열 제목을 점점 늘어나는만큼 잘 작동 다양한 하위 쿼리를 사용하고 다음과 같이 그것을 얻는 가장 좋은 방법을 보인다 제대로 표시되지만 실제 숫자 합계까지는 작동하지 않습니다. 기본적으로 데이터를 결합하여 각 영업 사원에게 총 판독 값을 제공합니다 (이 예에서는 Jim과 Ann 모두 번들 A에서 250 개의 판매를, 번들 B에서는 36 개를 판매합니다). 나에게 적절한 결과를 줄 수있는 쿼리를 작성할 수있는 방법이 있습니까? 아니면 적어도 그것에 가깝게 뭔가? 모든 입력에 감사드립니다.

+0

1가 있는가 ID'를 'TICKET_PRICES' 테이블에 추가 하시겠습니까? 그렇다면 '티켓 가격 ID'8765가 '번들 A'라는 것을 어떻게 알 수 있습니까? 'TICKET_PRICES' 테이블에 3 개 이상의 행이 있다면 어떻게 될까요? 출력에 더 많은 컬럼을 원합니까? –

+0

SQL Server를 사용하면 계산에 교차 적용을 사용하여이 작업을 수행 할 수 있습니다. 즉, oracle에서 가능하면 확실하지는 않습니다. – Standage

+0

@JustinCave 현재로서는 그 사실을 알 수있는 방법이 없으며 처음에는 "하드 코딩 된"값을 가진 기본 구조를 얻고 싶었습니다. 이상적으로는 그렇습니다. 서로 다른 묶음에있는 것과 같은 수의 열을 출력하고 싶습니다. – Linkmaster94

답변

0

Oracle에서 PIVOT 문을 사용하여이 작업을 수행 할 수 있습니다. 쿼리는 다음과 같이 보일 수 있습니다 :이 같은

WITH pivot_data AS (
      SELECT t.salesperson,p.bundle_name,t.ticket_quantity 
      FROM ticket_prices p, transactions t 
      where t.ticket_price_id = p.ticket_price_id 
     ) 
    SELECT * 
    FROM pivot_data 
    PIVOT (
      sum(ticket_quantity)  --<-- pivot_clause 
     FOR bundle_name   --<-- pivot_for_clause 
     IN ('1 ticket, $1','5 tickets, $10', '1 ticket, $3') --<-- pivot_in_clause 
     ); 

당신에게 줄 것이다 결과 : 결과에 "번들 A"와`티켓 가격 사이 : 1 개 관계

enter image description here

+0

유망한 것으로 보입니다. 얼마나 많은 번들이 있었는지 또는 이름이 없는지 알 수 있더라도 여전히 작동합니까? – Linkmaster94

+0

구문을 사용하면 IN (ANY) 또는 IN ()을 지정할 수 있지만 PIVOT 대신 PIVOT XML을 사용하는 경우에만 작동하는 것으로 보입니다. PIVOT XML의 결과는 PIVOT을 사용할 때와 같은 일반 쿼리 결과가 아닌 SALESPERSON 및 BUNDLE_NAME_XML의 목록이됩니다. – GTG