Oracle SQL - 将表行透视为列并在透视中使用子查询

2023-12-08

我正在处理 Oracle 12c R1 db,并有一个包含示例数据的示例视图,如下所示:
视图名称:CUST_HOTEL_VIEW

+----------------+---------------+---------------+
|    Customer    |     Hotel     | Booked Status |
+----------------+---------------+---------------+
| John Smith     | Beverly Hills | Booked        |
| John Smith     | Royal Palms   |               |
| Marilyn Lawson | Beverly Hills |               |
| John Smith     | Ritz-Carlton  |               |
| Marilyn Lawson | Royal Palms   |               |
| Sarah Elliot   | Royal Palms   |               |
| Sarah Elliot   | Ritz-Carlton  | Booked        |
| Sarah Elliot   | Royal Palms   | Booked        |
+----------------+---------------+---------------+

从上面的数据中,我试图通过行总计、列总计和每个客户预订的酒店数量来获得低于枢轴输出的数据:

+----------------+-------------+---------------+--------------+-------------+----------+
|    Customer    | Royal Palms | Beverly Hills | Ritz-Carlton | Grand Total | # Booked |
+----------------+-------------+---------------+--------------+-------------+----------+
| John Smith     |           1 |             1 |            1 |           3 |        1 |
| Marilyn Lawson |           1 |             1 |              |           2 |        - |
| Sarah Elliot   |           2 |               |            1 |           3 |        2 |
| Grand Total    |           4 |             2 |            2 |           8 |        3 |
+----------------+-------------+---------------+--------------+-------------+----------+

我尝试下面的查询来生成枢轴数据

SELECT * FROM
(
  SELECT CUSTOMER, HOTEL
  FROM CUST_HOTEL_VIEW
)
PIVOT
(
  COUNT(HOTEL)
  FOR HOTEL IN ('Royal Palms' as "Royal Palms",'Beverly Hills' as "Beverly Hills",'Ritz-Carlton' as "Ritz-Carlton")
)
ORDER BY CUSTOMER

我想知道:
1. 如何包含行总计
2. 如何包含列总计
3. 如何包含已预订酒店的数量以及
3.是否可以在PIVOT FOR HOTEL IN子句中编写子查询。 (我尝试了子查询但出现错误)

我很感谢对此的任何帮助。

Thanks,
Richa


只需使用条件聚合:

SELECT COALESCE(customer, 'Grand Total') as customer,
       SUM(CASE WHEN Hotel = 'Royal Palms' THEN 1 ELSE 0 END) as "Royal Palms",
       SUM(CASE WHEN Hotel = 'Beverly Hills' THEN 1 ELSE 0 END) as "Beverly Hills",       
       SUM(CASE WHEN Hotel = 'Ritz-Carlton' THEN 1 ELSE 0 END) as "Ritz-Carlton" ,
       COUNT(*) as "Grand Total",
       COUNT(Booked_Status) as "Num Booked"
FROM CUST_HOTEL_VIEW
GROUP BY ROLLUP(CUSTOMER)
ORDER BY CUSTOMER;

条件聚合则灵活得多pivot。就我个人而言,我认为没有理由pivot语法:它很好地完成一件事,但不像传统 SQL 语句那样构成构建块。

ROLLUP()也很有帮助。您还可以使用:

GROUP BY GROUPING SETS ( (CUSTOMER), () )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle SQL - 将表行透视为列并在透视中使用子查询 的相关文章

  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 如何从 java.sql.Blob 类型的 zip 文件中读取和提取 zip 条目,而无需将 FileInputStream 或文件路径作为字符串 java

    public static void unzipFiles java sql Blob zip throws Exception String paths byte blobAsBytes zip getBytes 1 int zip le
  • 如何登录Oracle数据库?

    我对 Oracle 数据库中常用的日志记录方法感兴趣 我们的方法如下 我们为要记录的表创建一个日志表 日志表包含原始表的所有列以及一些特殊字段 包括时间戳 修改类型 插入 更新 删除 修改者的 id 原始表上的触发器为每次插入和删除创建一个
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • MySQL 中的断言

    我有一个针对大型数据库运行的 SQL 脚本 我想在开始时提出几个简单的查询 作为健全性检查 有没有办法在MySQL中写断言 或者任何类型的 选择 如果它与该值不匹配 则中止整个脚本 一些疯狂的代码 要点是 SET可能会引发 mysql 变量
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • 如何在 Oracle 中列出活动/打开的连接?

    是否有任何隐藏表 系统变量或其他东西可以显示给定时刻的活动连接 Use the V SESSION http docs oracle com cd B19306 01 server 102 b14237 dynviews 2088 htm
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • CREATE TABLE 和 CREATE ANY TABLE 权限之间的区别

    我不明白这两种特权之间的区别 我找到了这两个解释 但这对我没有帮助 CREATE TABLE gt Enables a user to create a table owned by that user CREATE ANY TABLE g
  • 如何检查 Oracle 数据库是否存在长时间运行的查询

    我的应用程序使用 Oracle 数据库 速度缓慢或似乎完全停止 如何找出哪些查询成本最高 以便我可以进一步调查 这显示当前处于 活动 状态的 SQL select S USERNAME s sid s osuser t sql id sql
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • 如果执行没有事务的删除语句,是否会删除部分内容?

    如果表myTable包含100000000条记录 我执行DELETE FROM myTable 没有开始交易并且出现问题 例如服务器电源故障 会删除一些记录吗 否 如果数据库引擎符合ACID http en wikipedia org wi
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 消息 102,级别 15,状态 1,第 1 行“ ”附近的语法不正确

    我试图从临时表中查询 但不断收到此消息 Msg 102 Level 15 State 1 Line 1 Incorrect syntax near 有人能告诉我问题是什么吗 是因为要转换吗 查询是 select compid 2 conve
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U

随机推荐

  • 使用 EF Core 级联删除

    我目前在使用 EF Core 时遇到一些问题 我有一些需要删除的数据 并且我正在努力了解 Fluent API 的工作原理 确切地说是关于 OnDelete 功能 考虑经典的博客 帖子场景微软自己的网站 我想知道什么实体 到底是OnDele
  • ajax调用jquery函数后无法正常工作

    标题 照片 php cmdclose click function var id this id post cmddel php id id setTimeout function
  • 根据日期范围按日/月/周分组

    这是参考这个question 这是我的数据集 rating 4 ceatedAt ISODate 2016 08 08T15 32 41 262 0000 rating 3 createdAt ISODate 2016 08 08T15 3
  • 将 rvmsudo 与 Capistrano 结合使用

    我正在尝试设置 capistrano 来轻松部署我的 Rails3 应用程序 我对 Rails 还很陌生 除了我试图重新启动独立的乘客服务器之外 一切都正常工作 我在同一台服务器上运行redmine 所以我遵循http blog phusi
  • 如何在 C++ Autotools 项目中禁用 C 编译器

    我正处于向 C 库添加 Autotools 支持的早期阶段 此时我正在跑步autoreconf具有以下配置 cat Makefile am AUTOMAKE OPTIONS foreign bin PROGRAMS cryptest cat
  • jQuery Draggable 到基于 iFrame 的 Sortable 的偏移问题

    我在解决与将可拖动元素放入 iFrame 内的可排序区域相关的偏移问题时遇到了很多麻烦 下面的倾斜示例来演示该问题here 确保窗口相当窄 否则很难将元素放入 iFrame 中 很明显 您不能拖动该项目并将其放在指定位置 而是必须将其拖动到
  • SQL LIKE 查询失败 - 准备好的语句中出现致命错误

    我有以下代码 countQuery SELECT ARTICLE NO FROM WHERE upper ARTICLE NAME LIKE if numRecords con gt prepare countQuery numRecord
  • 实体框架支持多线程吗?

    我正在编写一个针对实体框架 6 1 3 的 C NET4 5 控制台应用程序 我使用工作单元范例如下 public class UnitOfWork IUnitOfWork IDisposable private readonly Data
  • cordova平台添加android在JAVA_HOME中出现错误

    我刚刚在 Windows 8 中安装了 cordova 3 3 当我使用命令 cordova platform add android 时 我收到此错误消息 Error failed to run java version make sur
  • Scala slick 2.0 updateAll 相当于 insertALL?

    寻找一种使用 slick 进行批量更新的方法 是否有与 insertALL 等效的 updateAll 到目前为止 古尔的研究让我失败了 我有一个具有不同状态的案例类别列表 每个都有不同的数值 因此我无法运行典型的更新查询 同时 我想保存多
  • 如果 VBA 中出现错误?

    是否可以在 VBA 中使用具有与 Iferror value value if error 或 Iserror value 类似功能的东西 我试着写 If IsError Cells i c curr Then CODE BLOCK 1 e
  • 使用database/sql时如何获取返回的行数?

    给定以下函数 func me OrderService GetOrders orderTx sql Tx orderId int orders sql Rows orders err ecommTx Query SELECT FROM or
  • 如何为nginx配置pem文件?

    我有3个文件 添加信任外部CARoot crt COMODORSAAddTrustCA crt COMODORSADomainValidationSecureServerCA crt 还有一个密钥库 如何创建 pem 文件 我试图将其内容放
  • 警告消息“newdata”有 1 行,但在 R 中找到的变量有 16 行

    我应该使用预测函数来预测何时fjbjor是 5 5 我总是收到此警告消息 我尝试了很多方法 但它总是出现 所以有人能看到我在这里做错了什么吗 这是我的代码 fit lm lt lm fjbjor amagn data bjor summar
  • 缩放和镜像 SVG 对象

    如何最轻松地首先缩放对象 例如当前大小的 2 倍 然后垂直和水平翻转 或两者都翻转 截至目前 我可以设置 scale 2 2 使其变为宽度和高度的 2 倍 但无法与垂直翻转的scale 1 1 同时翻转它 我正在以编程方式创建 SVG 对象
  • 从 html 源中删除所有换行符

    好吧 我知道混淆是个坏主意 但我希望所有的 html 代码都放在一长行中 所有的html标签都是通过PHP生成的 所以我认为这是可能的 我知道替换 n r来自正则表达式 但不知道如何做到这一点 如果我不清楚 这里有一个例子 output p
  • Javascript - 事件监听器无法在外部 js 文件中工作

    我试图删除 html 中的 onClick 标签 并将 EventListener 添加到我的外部 js 文件中 但似乎无法让它工作 以下行有效
  • 从 Perl 中的 Windows 注册表读取[重复]

    这个问题在这里已经有答案了 我试图在不检查一系列硬编码路径的情况下获取程序的安装位置 希望从 Windows 注册表中存储的路径中获取它 但是当我尝试读取所需的键值 我读过关于使用 Perl 解析 Windows 注册表 我想我已经将所有答
  • 函数局部、自引用、惰性斐波那契数列

    我想创建一个返回斐波那契数的惰性扩展无限序列的函数 现在 我可以使我的序列在顶级命名空间中可用 如下所示 def fibonacci numbers lazy cat 0 1 map fibonacci numbers rest fibon
  • Oracle SQL - 将表行透视为列并在透视中使用子查询

    我正在处理 Oracle 12c R1 db 并有一个包含示例数据的示例视图 如下所示 视图名称 CUST HOTEL VIEW Customer Hotel Booked Status John Smith Beverly Hills B