使用 PIVOT 和 UNPIVOT

JAVA异常记录(ORA-56900:pivot|unpivot 操作内不支持绑定变量) JAVA中ORA-56900: pivot|unpivot 操作内不支持绑定变量ORA-56900: pivot|unpivot 操作内不支持绑定变量使用场景及遇到问题解决方法:在java中拼好sql再执行 ORA-56900: pivot|unpivot 操作内不支持绑定变量 使用场景及遇到问题 由于报表需求需要统计一年的数据:年份是由客户选的,会动态变 实际数据如上,会有指定的月份数据为空,由于觉得java去处理麻烦,就用oracle行转列行数补充日期为空的数据 理想状态: 实现方式 select 阅读详情

可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。

注意注意

对升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT 和 UNPIVOT 时,必须将数据库的兼容级别设置为 90 或更高。有关如何设置数据库兼容级别的信息,请参阅sp_dbcmptlevel (Transact-SQL)。

PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)。

以下是带批注的 PIVOT 语法。

SELECT <非透视的列>,

    [第一个透视的列] AS <列名称>,

    [第二个透视的列] AS <列名称>,

    ...

    [最后一个透视的列] AS <列名称>,

FROM

    (<生成数据的 SELECT 查询>)

    AS <源查询的别名>

PIVOT

(

    <聚合函数>(<要聚合的列>)

FOR

[<包含要成为列标题的值的列>]

    IN ( [第一个透视的列], [第二个透视的列],

    ... [最后一个透视的列])

) AS <透视表的别名>

<可选的 ORDER BY 子句>;

下面的代码示例生成一个两列四行的表。

USE AdventureWorks2008R2 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost 
FROM Production.Product
GROUP BY DaysToManufacture;

下面是结果集:

DaysToManufacture          AverageCost

0                          5.0885

1                          223.88

2                          359.1082

4                          949.4105

没有定义 DaysToManufacture 为 3 的产品。

以下代码显示相同的结果,该结果经过透视以使 DaysToManufacture 值成为列标题。提供一个列表示三 [3] 天,即使结果为 NULL。

-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;

下面是结果集:

Cost_Sorted_By_Production_Days    0         1         2           3       4       

AverageCost                       5.0885    223.88    359.1082    NULL    949.4105

可能会用到 PIVOT 的常见情况是:需要生成交叉表格报表以汇总数据。例如,假设需要在 AdventureWorks2008R2 示例数据库中查询 PurchaseOrderHeader 表以确定由某些特定雇员所下的采购订单数。以下查询提供了此报表(按供应商排序)。

USE AdventureWorks2008R2;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY pvt.VendorID;

以下为部分结果集。

VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

1492        2           5           4           4           4

1494        2           5           4           5           4

1496        2           4           4           5           5

1498        2           5           4           4           4

1500        3           4           4           5           4

将在 EmployeeID 列上透视此嵌套 select 语句返回的结果。

SELECT PurchaseOrderID, EmployeeID, VendorID
FROM PurchaseOrderHeader;

这意味着 EmployeeID 列返回的唯一值自行变成了最终结果集中的字段。因此,在透视子句中指定的每个 EmployeeID 号都有相应的一列:在本例中为雇员 164、198、223、231 和233。PurchaseOrderID 列作为值列,将根据此列对最终输出中返回的列(称为分组列)进行分组。在本例中,通过 COUNT 函数聚合分组列。请注意,将显示一条警告消息,指出为每个雇员计算 COUNT 时未考虑显示在 PurchaseOrderID 列中的任何空值。

重要说明重要提示

如果聚合函数与 PIVOT 一起使用,则计算聚合时将不考虑出现在值列中的任何空值。

UNPIVOT 将与 PIVOT 执行几乎完全相反的操作,将列转换为行。假设以上示例中生成的表在数据库中存储为 pvt,并且您需要将列标识符 Emp1、Emp2、Emp3、Emp4 和 Emp5旋转为对应于特定供应商的行值。这意味着必须标识另外两个列。包含要旋转的列值(Emp1、Emp2...)的列将被称为 Employee,将保存当前位于待旋转列下的值的列被称为Orders。这些列分别对应于 Transact-SQL 定义中的 pivot_column 和 value_column。以下为该查询。

--Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO

以下为部分结果集。

VendorID Employee Orders

---------- ---------- ------

1          Emp1       4

1          Emp2       3

1          Emp3       5

1          Emp4       4

1          Emp5       4

2          Emp1       4

2          Emp2       1

2          Emp3       5

2          Emp4       5

2          Emp5       5

...

请注意,UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 会执行一次聚合,从而将多个可能的行合并为输出中的单个行。而 UNPIVOT 不会重现原始表值表达式的结果,因为行已经被合并了。另外,UNPIVOT 的输入中的空值不会显示在输出中,而在执行 PIVOT 操作之前,输入中可能有原始的空值。

AdventureWorks2008R2 示例数据库中的 Sales.vSalesPersonSalesByFiscalYears 视图将使用 PIVOT 返回每个销售人员在每个会计年度的总销售额。若要在 SQL Server Management Studio 中编写视图脚本,请在“对象资源管理器”中,在“视图”文件夹下找到 AdventureWorks2008R2 数据库对应的视图。右键单击该视图名称,再选择“编写视图脚本为”。

SQLServer使用 PIVOT 和 UNPIVOT行列转换 SQLServer使用PIVOT和UNPIVOT行列转换,PIVOT 的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。 阅读详情

相关推荐

SQL之pivot语句与unpivot语句

文章目录pivot行转列例子1例子2例子3unpivot列转行 pivot行转列 pivot 用于将列值旋转为列名(即行转列),在SQLServer 2000可以用聚合函数配合CASE语句实现 即SQL语句行列转换的两种方法 case…when与pivot函数的应用 但pivot运算符能够实现CASE语句相同的功能,并且可以用更少的代码 语法 引用自:https://blog.youkuaiyun.com/yx183/article/details/82423420 SELECT <非透视的列>,

积一时之步,臻千里之遥程 3606

oracle数据库中unpivot函数,oracle pivot 和 unpivot 函数的使用

pivot的格式selectfrom( inner_query)pivot(aggreate_function for pivot_column in ( list of values))order by ...;用法举例:selectfrom (select month,prd_type_id,amountfrom all_sales)pivot (sum(amount) for month i...

weixin_28931449的博客 1057

PIVOT用于将列值旋转为列名

PIVOT用于将列值旋转为列名 C# PIVOT用于将列值旋转为列名 C#

Oracle列转行unpivot函数的使用

Oracle列转行unpivot函数的使用新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 SELECT STU_NAME, TERM, subject, score FROM (SELECT '罗飞' STU_NAME

shammy_feng的博客 3万+

枢纽表达式PIVOT和UNPIVOT的简单用法,sql server 2005,列转成行

枢纽表达式PIVOT和UNPIVOT的简单用法 sql 列转成行 sql server 2005

Java中Oracle操作绑定变量使用用户工具模块解决方案

Java中Oracle操作绑定变量使用用户工具模块解决方案

行列互转 Pivot 和 Unpivot

<br />Pivot<br />如您所知,关系表是表格化的,即,它们以列-值对的形式出现<br />CUST_ID STATE_CODE TIMES_PURCHASED<br />------- ---------- ---------------<br />      1 CT                       1<br />      2 NY                      10<br />      3 NJ                       2<br />     

瞧字不识 745

Halcon棋盘格畸变矫正

通常我们使用的相机都是带有一定的畸变的,只是畸变的大小不同。对于我们常见的测量项目来说,对测量精度的要求很高,通常从相机镜头上进行优化,但是即使镜头优化或者成本原因,造成图像仍有一定的畸变时,我们就可是使用棋盘格标定板,进行畸变矫正。

m0_51559565的博客 3396

Pivot 奇淫技巧之 动态数据绑定

我相信了解 UWP 应用开发的同学都对 ListView 和 GridView 的数据绑定很熟悉啦,那我在做一个小应用的时候突然对 Pivot 有了数据绑定的要求,主要是索引出数据库里的表,每一张表都抽象成 Pivot 的一个 Header,那我们怎么做呢?首先,既然是数据绑定,那先建一个模型类再说嘛 public class Pivots { public stri...

WinFanChen的博客 1280

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2285

eNSP-抓包解析TCP三次握手和四次挥手的过程

一、环境搭建 1.设备连接 2.服务器配置 3.客服端配置 二、抓包测试 1.打开抓包软件 2.客户端获取数据 三、抓包结果

小橙子的博客 3353

Oracle PIVOT和UNPIVOT

您是否曾经需要将一组数据从行转换为列?您可以使用Oracle PIVOT功能(相反,使用Oracle UNPIVOT)进行此操作。 目录 本指南方涵盖以下主题。您可以单击以下任一条目进入本页的该部分: 问题 Oracle SQL中的PIVOT关键字 简单的PIVOT示例 指定分组的列 在PIVOT中使用WHERE子句 别名PIVOT列 执行多个聚合 按多列分组 XML的PIVOT示例 动态指定列 使用UNPIVOT将列转换为行 一个简单的UNPIVOT示例 在UNPIVOT

allway2的博客 4174

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4690

SQL使用 PIVOT 和 UNPIVOT

可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。 注意 对升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT ...

我的优快云博客之家 5684

VH6501实战:手把手教你用CANoe脚本精准触发CAN总线干扰(附避坑点)

本文详细介绍了使用VH6501和CANoe脚本精准触发CAN总线干扰的实战技巧,包括触发位置控制、ValidityMask配置和干扰序列设置等关键步骤。通过具体代码示例和常见问题排查指南,帮助工程师避开实际应用中的常见陷阱,提升CAN总线干扰测试的准确性和效率。

weixin_33709219的博客 370

[AI] 嵌入模型选择:bge / text-embedding-3 / Jina Embeddings 对比与选型指南

摘要: 本文对比了BGE-M3、OpenAI和Jina三种主流嵌入模型在语言覆盖、性能、延迟、维度和成本等维度的差异。BGE-M3适合中文场景,本地部署成本低;OpenAI API多语能力强但依赖网络;Jina在多语表现突出但需关注商用许可。测试显示BGE-M3本地延迟3-6ms,OpenAI API延迟200-600ms。选型建议:隐私场景选BGE本地部署,多语低维护选OpenAI,高精度选Jina。部署时需注意批处理优化、向量库压缩和商用许可等问题,建议建立评测指标并监控关键指标。

每日出拳老爷子的博客 428

Oracle利用PIVOT和UNPIVOT进行行列转换

在数据库开发中,我们会经常遇到行转列和列转行的情况,方法很多,比如使用CASE...WHEN...、DECODE,或者PIVOT和UNPIVOT都可以实现该功能,本篇讲解下PIVOT和UNPIVOT的使用,希望可以让读者举一反三,了解行列转换的用法。 PIVOT语法 SELECT ...    FROM ...    PIVOT [XML]              (

个人公众号:Alen的数据库学习笔记 8366

【Bug已解决】Request timed out / API Timeout — Claude Code 请求超时解决方案

方案适用场景推荐指数难度方案一:增加超时大任务处理⭐⭐⭐⭐⭐低方案二:切换 SonnetOpus 太慢⭐⭐⭐⭐⭐低方案三:缩小范围大代码库⭐⭐⭐⭐⭐低方案四:优化网络网络延迟高⭐⭐⭐⭐中方案五:减少 MCPMCP 超时⭐⭐⭐中方案六:流式响应长生成任务⭐⭐⭐低根本原因:请求超时最常见原因是请求体过大(35%)和 Opus 模型推理慢(25%),默认 60 秒超时阈值对大型任务不够最佳实践。

一键难忘的博客 5163

PIVOT 和 UNPIVOT实例使用

PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。 1、PIVOT 使用实例 先建立一个临时表做为例表: 1createtable#PIVOT(idint,namevarchar(50),[subjec...

weixin_30604651的博客 1万+

虚拟网络的“隐形盾”:C#如何用代码把DDoS踢出门?

本文分享了如何用C#防御DDoS攻击的实战经验。通过三种核心防御策略:1)基于IP的速率限制中间件,使用滑动时间窗口算法控制请求流量;2)自动IP封禁服务,通过特征检测识别恶意IP并加入黑名单;3)优化数据库连接池和HTTP客户端连接池,合理配置资源参数。文中提供了详细的C#代码实现,包括限流中间件、IP封禁服务和连接池优化方案,并分享了生产环境中的调优经验,如配合Redis实现分布式限流、使用fail2ban自动封禁等技巧,帮助开发者构建更健壮的防御体系。

墨夶的博客 329

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

pivot和unpivot函数

今天小编整理的都是固定行转列(列转行)的例子! 一:unpivot列转行函数举例演示:创建一张表tmp_test,数据如图所示代码展示:select code,name,cource,grade from tmp_test unpivot(grade for source in (chinese,math,english));数据结果展示: 二:pivot行转列函数举例演示:创建一张表tmp_te...

weixin_34168700的博客 4997

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pivot,unpivot的认识

1.pivot函数 PIVOT(任意聚合函数 FOR 列名 IN(类型)) 其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名;IN中还可以指定子查询。 案例: select * from (select name,subject,score from stu_tmp) pivot(sum(score) for subject in ('语文' ,'数学' as math,'英语',...

u013983161的博客 1148

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pivot unpivot_静态和动态SQL Pivot和Unpivot关系运算符概述

pivot unpivot In this article, we’ll walk-through the SQL Pivot and SQL Unpivot operators and how they can be useful to transpose SQL Server data. Also, we’ll discuss both static and dynamic ways t...

culuo4781的博客 1181

Pivot 和 Unpivot

原地址:http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html Pivot 如您所知,关系表是表格化的,即,它们以列-值对的形式出现。假设一个表名为 CUSTOMERS。 SQL> desc customers Name Null

freedompuge的专栏 1003
上一篇: 2012年电子商务网站用户体验研究
下一篇: powerdesigner中将表的name在生成建表sql时生成说明
yellowegg
博客等级 码龄19年 15粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值