`
wangxiao5530
  • 浏览: 136820 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

oracle行列转换

 
阅读更多

 

1) 列转行

WITH TB AS 
(
    SELECT '1'   AS SID,
            '英语'  AS E,
            '70' AS E_SCORE,
            '数学' S,
            '89' AS S_SCORE,
            '语文'  AS T,
            '69' AS T_SCORE
     FROM   DUAL       
)
SELECT SID,E AS 科目,E_SCORE AS 分数
FROM
(
    SELECT SID,E,E_SCORE  FROM  TB
    UNION ALL
    SELECT SID,S,S_SCORE  FROM  TB
    UNION ALL
    SELECT SID,T,T_SCORE  FROM  TB
);

 

2) 行转列 (数值类型)

 

WITH TB AS
(
    SELECT '1'  AS SID, '英语'  AS E,'70' AS E_SCORE FROM DUAL
    UNION ALL
    SELECT '1'  AS SID, '数学' S,'89' AS S_SCORE  FROM DUAL
    UNION ALL
    SELECT '1'  AS SID, '语文'  AS T,'69' AS T_SCORE  FROM DUAL
    UNION ALL
    SELECT '2'  AS SID, '英语'  AS E,'72' AS E_SCORE FROM DUAL
    UNION ALL
    SELECT '2'  AS SID, '数学' S,'58' AS S_SCORE  FROM DUAL
    UNION ALL
    SELECT '2'  AS SID, '语文'  AS T,'60' AS T_SCORE  FROM DUAL
    UNION ALL
    SELECT '3'  AS SID, '英语'  AS E,'85' AS E_SCORE FROM DUAL
    UNION ALL
    SELECT '3'  AS SID, '数学' S,'90' AS S_SCORE  FROM DUAL
)
SELECT SID,
       SUM(DECODE(E,'英语',E_SCORE)) AS 英语,
       SUM(DECODE(E,'语文',E_SCORE)) AS 语文,
       SUM(DECODE(E,'数学',E_SCORE)) AS 数学
FROM   TB
GROUP BY SID;

 

3) 方法一:行转列 (字符串类型,适用于数值类型)

 

WITH TB AS
(
    SELECT 1 AS ID,'你' AS NAME FROM DUAL
    UNION ALL
    SELECT 1 ,'好'  FROM DUAL
    UNION ALL
    SELECT 1 ,'吗'  FROM DUAL
    UNION ALL
    SELECT 2 ,'我'  FROM DUAL
    UNION ALL
    SELECT 2 ,'不'  FROM DUAL
    UNION ALL
    SELECT 2 ,'好'  FROM DUAL
),
TB2 AS
(
    SELECT ID,
           NAME,
           ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS RN
    FROM   TB
),
TB3 AS
(
    SELECT ID,
           MAX(SYS_CONNECT_BY_PATH(NAME,' ')) AS NAME
    FROM   TB2
    START WITH RN = 1
    CONNECT BY PRIOR RN = RN - 1 AND PRIOR ID = ID
    GROUP BY ID
)
SELECT ID,REPLACE(NAME,' ','') AS NAME
FROM   TB3;

 

4) 方法二:行转列 (字符串类型,适用于数值类型)

 

WITH TB AS
(
    SELECT 1 AS ID,'你' AS NAME FROM DUAL
    UNION ALL
    SELECT 1 ,'好'  FROM DUAL
    UNION ALL
    SELECT 1 ,'吗'  FROM DUAL
    UNION ALL
    SELECT 2 ,'我'  FROM DUAL
    UNION ALL
    SELECT 2 ,'不'  FROM DUAL
    UNION ALL
    SELECT 2 ,'好'  FROM DUAL
),
TB2 AS
(
    SELECT ID,
           NAME,
           RN,
           LAG(RN) OVER(PARTITION BY ID ORDER BY RN) AS LG
    FROM   (
                SELECT ID,NAME,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS RN
                FROM   TB
           ) 
),
TB3 AS
(
    SELECT ID,
           MAX(SYS_CONNECT_BY_PATH(NAME,' ')) AS NAME
    FROM   TB2
    START WITH RN = 1
    CONNECT BY PRIOR RN = RN - 1 AND PRIOR ID = ID
    GROUP BY ID
)
SELECT ID,REPLACE(NAME,' ','') AS NAME
FROM   TB3;

 

 

 

分享到:
评论

相关推荐

    oracle行列转换例子

    本文将深入解析一个Oracle行列转换的例子,通过详细解释SQL语句的构成及其背后的逻辑,帮助读者理解如何在Oracle中实现行列转换。 ### Oracle行列转换例子解析 #### SQL语句结构分析 给定的SQL语句主要分为几个...

    Oracle行列转换

    通过下载提供的`Oracle补充内容_行列转换.sql`文件,你可以看到具体的SQL示例和实际操作,这将帮助你更好地理解和掌握Oracle的行列转换技巧。在实践中,理解并熟练运用这些技术,将有助于你更有效地处理和展示数据,...

    oracle行列转换总结

    在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...

    oracle行列转换实例

    【Oracle 行列转换实例】 在数据库管理中,有时我们需要将数据表的行与列进行转换,以便于数据分析和报表展示。Oracle 提供了一种高效的方法,即使用分析函数来实现这种行列转换。分析函数主要设计用于处理累计计算...

    Oracle 行列转换 总结

    Oracle 行列转换总结 Oracle 行列转换是指在 Oracle 数据库中将行与列之间进行转换的操作。这种转换有六种情况:列转行、行转列、多列转换成字符串、多行转换成字符串、字符串转换成多列、字符串转换成多行。 1. ...

    Oracle 行列转换总结

    ### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,行列转换是一项非常实用的功能,尤其是在处理报表数据或需要特定格式输出时。本文档将详细讲解Oracle数据库中的行列转换方法,并通过具体实例来说明...

    oracle行列转换示例

    oracle行列转换示例,查询转换,有创表过程,数据,清晰明了

    Oracle行列转换_总结

    ### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,有时需要将数据从行格式转换为列格式或反之亦然,这种需求通常被称为“行列转换”。Oracle 提供了多种方法来实现这样的转换,适用于不同的场景。本文...

    ORACLE 行列转换

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于改变数据的展示格式,使得数据能够更好地适应特定的分析或报告需求。本文将详细介绍如何在Oracle中实现行转列(即行列转换的一种)以及列转行的操作,...

    oracle行列转换_面试经常考到

    常见的数据库面试关于行转列列转行的操作,方便你的面试,经常考到的

    oracle行列转换的例子

    ### Oracle 数据库中的行列转换详解 #### 一、引言 在处理复杂的数据查询与展示时,经常会遇到需要将数据库中的行数据转换成列数据的需求,这种操作通常被称为“行列转换”。例如,当我们想要汇总不同部门对各种...

    oracle sql 行列转换

    行列转换,sys_connect_by_path,row_number等函数的用法

    oracle行列转换[文].pdf

    Oracle数据库中的行列转换是数据分析和报表制作中常见的需求,它涉及到将数据表中的一行数据转化为多列,或者相反,将多列数据转化成一行。在Oracle中,我们可以使用多种方法来实现这种转换,比如使用Pivot、Unpivot...

    Oracle中SQL语句行列之间相互转换

    在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、报表制作等场景非常有用。本文将详细介绍Oracle中如何进行行列转换,并提供实际的例子。 ####...

    Oracle SQLServer行列转换

    ### Oracle SQLServer 行列转换知识点详解 #### 一、SQLServer 行转列方法 在SQLServer中,实现行转列的操作有两种主要方法:一种是利用`CASE...WHEN`语句配合`GROUP BY`聚合函数的方式;另一种是通过`PIVOT`操作...

    oracle数据行列转换

    在Oracle数据库中,数据的行列转换是数据处理过程中的常见操作,尤其在数据分析、报表制作以及数据展示时显得尤为重要。本篇文章将详细讲解Oracle 10g中的行列转换技术,包括如何实现行转列和列转行。 首先,我们要...

Global site tag (gtag.js) - Google Analytics