在查询中组合两个表并从中创建新列

时间:2012-02-17 20:06:55

标签: sql oracle

我遇到了一个查询问题,我不能完全确定数据库的设置方式。基本上,我将在我的查询中使用两个不同的表,比如说交易和票价。它们看起来像这样(有一些样本数据):

    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在Bundle A中有250个销售,在Bundle B中有36个销售等)。有什么方法可以编写一个能给我正确结果的查询吗?甚至至少接近它的东西?感谢您的任何意见。

1 个答案:

答案 0 :(得分: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
        );

会给你这样的结果:

enter image description here