我遇到了一个查询问题,我不能完全确定数据库的设置方式。基本上,我将在我的查询中使用两个不同的表,比如说交易和票价。它们看起来像这样(有一些样本数据):
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个销售等)。有什么方法可以编写一个能给我正确结果的查询吗?甚至至少接近它的东西?感谢您的任何意见。
答案 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
);
会给你这样的结果: