首页 > 数据库 > mysql教程 > 如何在 Oracle 中将行透视为列:DECODE 与 PIVOT?

如何在 Oracle 中将行透视为列:DECODE 与 PIVOT?

Mary-Kate Olsen
发布: 2025-01-03 01:09:39
原创
854 人浏览过

How to Pivot Rows to Columns in Oracle: DECODE vs. PIVOT?

如何在 Oracle 中将数据从行转换为列:透视解决方案

Oracle 数据库提供了将数据从行重组为列的通用技术,这一过程称为透视。当数据以狭窄的格式组织时,这种转换就变得必要,并且需要以更广泛的视图呈现它。

为了完成行到列的转换,Oracle 提供了两种方法:

Oracle 10g 中的 DECODE 函数

在早期版本的 Oracle (10g) 中,可以使用 DECODE 函数实现透视。考虑以下表结构:

LOAN NUMBER DOCUMENT_TYPE DOCUMENT_ID
992452533663 Voters ID XPD0355636
992452533663 Pan card CHXPS5522D
992452533663 Drivers licence DL-0420110141769

要透视此数据,您可以使用 DECODE 函数,如下所示:

SELECT
    loan_number,
    MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id,
    MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card,
    MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence
  FROM
    doc_tab
GROUP BY loan_number
ORDER BY loan_number;
登录后复制

此查询按贷款编号对数据进行分组并使用嵌套 DECODE用于将文档 ID 分配给特定文档类型的函数。 MAX 函数为每个贷款文档组合返回所需的单个值。

Oracle 11g 及更高版本中的 PIVOT 子句

Oracle 11g 引入了专用的 PIVOT 子句来简化行到列的转换。以下查询演示了其用法:

SELECT *
  FROM doc_tab
PIVOT (
  MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence')
);
登录后复制

此查询中的 PIVOT 子句显式定义要在转换结果中创建的列。它会根据指定的文档类型自动对数据进行分组,并组合匹配的文档 ID。

要进一步了解 Oracle 中的数据透视技术,请参阅以下资源:

  • [Tim霍尔关于转向的文章Oracle](https://www.oracle.com/technetwork/database/oracle-magazine/oracle-11g-pivot-127859.html)
  • [比较两种解决方案的 SQLFiddle 示例](https://www .sqlfiddle.com/#!5/7956/2/0)

以上是如何在 Oracle 中将行透视为列:DECODE 与 PIVOT?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板