Oracle SQL-具有多个标头的条件聚合枢轴

Oracle SQL-具有多个标头的条件聚合枢轴,sql,oracle,header,pivot,Sql,Oracle,Header,Pivot,这个问题比我以前的问题有了很大的改进,希望我能在这里得到一些帮助。我有以下表格/视图和样本或虚拟数据: 表/视图名称:CUST_HOTEL_VIEW 需要帮助以多个标题获取以下输出,即获取每个酒店的客户数量和预算总和,以下是excel数据透视表的输出: 我正在使用Oracle 12c R1 db,如果我得到有助于查询的条件聚合;我发现这更简单,也更容易理解 我尝试以下查询以获取计数和预订金额: SELECT COALESCE(CUSTOMER, 'Grand Total') as " " ,

这个问题比我以前的问题有了很大的改进,希望我能在这里得到一些帮助。我有以下表格/视图和样本或虚拟数据: 表/视图名称:CUST_HOTEL_VIEW

需要帮助以多个标题获取以下输出,即获取每个酒店的客户数量和预算总和,以下是excel数据透视表的输出:

我正在使用Oracle 12c R1 db,如果我得到有助于查询的条件聚合;我发现这更简单,也更容易理解

我尝试以下查询以获取计数和预订金额:

SELECT COALESCE(CUSTOMER, 'Grand Total') as " " ,
       (case when COUNT(booked_status) != 0 then count(booked_status) else null end) as "# Booked",
sum(case when booked_status = 'Booked' THEN booking_amount ELSE null END) as "Booked Amount"
FROM CUST_HOTEL_VIEW
GROUP BY ROLLUP(CUSTOMER)
order by CUSTOMER
并得到以下输出:

+--------------+----------+---------------+
|              | # Booked | Booked Amount |
+--------------+----------+---------------+
| John Smith   |        1 |           500 |
| Sarah Elliot |        2 |          2500 |
| Grand Total  |        3 |          3000 |
+--------------+----------+---------------+
但无法获取合并标题的输出

我非常感谢你在这方面的帮助

谢谢, 里奇

更新: 在下面添加最终输出表部分: 最终输出表:


从问题的描述中,我无法推断出具体的要求是什么,但在我看来,您正在寻找类似的要求:

演示:


在SQL中,您可以在编写查询时决定填充哪些列。因为在你的结果集中有15家不同的酒店,所以很难得到15家酒店。我用表格计算程序F.e来完成这些任务。Excel数据透视Table@am2,谢谢您的及时回复。我很感激。假设表中只有3或4家酒店,从这个意义上说,使用sql查询是否仍然不可能做到这一点?我想知道如何使用SQL实现分组的多行标题。如果查询对我提供的示例数据有效,那对我来说就足够了。谢谢回复。如果我的问题让人困惑,我很抱歉。您建议的Answser非常接近,但我希望标题合并。因为我无法在评论中发布表。我正在更新“最终表输出”部分下的OP这在普通SQL中是不可能的,您需要在应用程序的表示层执行此操作,不管它是什么-java、c、excel等,而不是在数据库端..感谢您的反馈和回答。我很感激。您能让我知道我是否可以在这行中使用子查询:“贝弗利山”、“皇家棕榈”、“丽思卡尔顿”的酒店吗。我尝试了子查询并得到了一个错误否,不能使用子查询,pivot是一个静态SQL。您可以在XMLPivot中使用子查询,请参阅本文:,但这将生成XML结果,而不是类似于表的结果集。您也可以使用动态SQL来动态生成查询,但这是一个庞大的主题。
+--------------+----------+---------------+
|              | # Booked | Booked Amount |
+--------------+----------+---------------+
| John Smith   |        1 |           500 |
| Sarah Elliot |        2 |          2500 |
| Grand Total  |        3 |          3000 |
+--------------+----------+---------------+
+--------------+---------------+--------+-------------+--------+--------------+--------+-------------+------+
|   CUSTOMER   |      Beverly Hills     |      Royal Palms     |      Ritz-Carlton     |      Grand Total   |
+--------------+---------------+--------+-------------+--------+--------------+--------+-------------+------+
|              | Count         | Sum    | Count       | Sum    | Count        | Sum    | Count       | Sum  |
+--------------+---------------+--------+-------------+--------+--------------+--------+-------------+------+
| Sarah Elliot | 0             | (null) | 1           | 2500   | 1            | 2000   | 2           | 4500 |
| John Smith   | 1             | 2000   | 0           | (null) | 0            | (null) | 1           | 2000 |
| Grand Total  | 1             | 2000   | 1           | 2500   | 1            | 2000   | 3           | 6500 |
+--------------+---------------+--------+-------------+--------+--------------+--------+-------------+------+
SELECT *
FROM (
  SELECT CUSTOMER, HOTEL, BUDGET
  FROM Table1
  WHERE BOOKED_STATUS = 'Booked'
)
PIVOT (
  count(*) as cnt, sum(BUDGET) as budget
  FOR HOTEL IN ('Beverly Hills','Royal Palms','Ritz-Carlton')
 )
|     CUSTOMER | 'Beverly Hills'_CNT | 'Beverly Hills'_BUDGET | 'Royal Palms'_CNT | 'Royal Palms'_BUDGET | 'Ritz-Carlton'_CNT | 'Ritz-Carlton'_BUDGET |
|--------------|---------------------|------------------------|-------------------|----------------------|--------------------|-----------------------|
| Sarah Elliot |                   0 |                 (null) |                 1 |                 2500 |                  1 |                  2000 |
|   John Smith |                   1 |                   2000 |                 0 |               (null) |                  0 |                (null) |