`
guohf
  • 浏览: 417910 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

行列转换

阅读更多

数据库行列转换

 

SQLserver 2000 行列转换例子:
1.
学号,  课程号, 分数
sid     cid    mark
030611 1000 70
030611 1001 80
030611 1002 75
030611 1003 86
030611 1004 70
030612 1000 74
030612 1001 83
030612 1002 75
030612 1003 86
030612 1004 75
030613 1000 75
030613 1001 85
030613 1002 85
030613 1003 86
030613 1004 90
=>转换为下面形式:
sid     1000  1001    1002    1003     1004    总分   平均分  最高分
030611 70 80 75 86 70 381 76 86
030612 74 83 75 86 75 393 78 86
030613 75 85 85 86 90 421 84 90
方法一:
select sid ,
[1000]=sum(case cid when '1000'then mark else null end),
[1001]=sum(case cid when '1001'then mark else null end),
[1002]=sum(case cid when '1002'then mark else null end),
[1003]=sum(case cid when '1003'then mark else null end),
[1004]=sum(case cid when '1004'then mark else null end),
[总分]=sum(case sid when sid then mark else null end),
[平均分]=avg(case sid when sid then mark else null end),
[最高分]=max(case sid when sid then mark else null end)
from sc group by sid;

方法二:
  --1)声明一个字符串变量,以供动态拼装
  declare @sql varchar(8000)
  --2)拼装sql语句
  set @sql = 'select sid'
  --3)动态获得cid,为每个cid构建一个列 --把所有唯一的科目的名称都列举出来
  select @sql=@sql+',['+cid+']=sum(case cid when '''+cid+''' then mark else null end)'from (select distinct cid from sc) as sc1
  select @sql=@sql+',[总分]=sum(case sid when sid then mark else null end)'
  select @sql=@sql+',[平均分]=avg(case sid when sid then mark else null end)'
  select @sql=@sql+',[最高分]=max(case sid when sid then mark else null end)'
  select @sql=@sql+'from sc group by sid'--分组
  exec (@sql) --执行sql命令

ps:
CASE input_expression WHEN when_expression THEN result_expression
        [ ...n ]
    [
        ELSE else_result_expression
    END
input_expression:是使用简单 CASE 格式时所计算的表达式。
when_expression:使用简单 CASE 格式时 input_expression 所比较的简单表达式。
result_expression:当 input_expression = when_expression 取值为 TRUE,即得到result_expression的值
else_result_expression:当比较运算取值不为 TRUE 时返回的表达式的值,省略else_result_expression时,
前面判断的结果不为TRUE时,默认为NULL

oracle 10g行列转换的例子:

NAME       COURSE                    GRADE
---------- -------------------- ----------
张松       语文                         74
张松       数学                         83
张松       物理                         93
李四       语文                         74
李四       数学                         84
李四       物理                         94

方法一:
 select name,
  sum(decode(course , '语文' ,grade ,0))"语文",
  sum(decode(course , '数学', grade , null))"数学",
  sum(decode(course , '物理' , grade , null))"物理",
  max(decode(name,name,grade,null))"最高分",
  sum(decode(name,name,grade,null))"总分",
  avg(decode(name,name,grade,null))"平均分"
  from tb group by name;

NAME             语文       数学       物理     最高分       总分     平均分
---------- ---------- ---------- ---------- ---------- ---------- ----------
李四               74         84         94         94        252         84
张松               74         83         93         93        250 83.3333333

分享到:
评论

相关推荐

    sql行列转换扩展

    SQL 行列转换扩展 SQL 行列转换扩展是指将数据库表中的行数据转换为列数据,或者将列数据转换为行数据的操作。这种操作在数据分析和报表生成中非常常见。在本文中,我们将介绍两种类型的行列转换扩展方法:行转列...

    Excel行列转换工具

    在Excel表格处理中,行列转换是一项非常常见的操作,尤其对于数据整理和分析至关重要。"Excel行列转换工具"正是为了简化这一过程而设计的,它提供了一键式的转换功能,使得用户能够快速、高效地在行与列之间切换,极...

    oracle行列转换例子

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于将数据从行的形式转换为列的形式,或者反之。这种转换在数据分析、报表制作等场景中尤为常见。本文将深入解析一个Oracle行列转换的例子,通过详细解释...

    sql server 行列转换

    ### SQL Server 行列转换知识点解析 #### 一、行列转换概述 在处理数据库查询时,我们经常会遇到需要将表中的行数据转换为列数据的需求,这种操作通常被称为“行列转换”。例如,当我们需要汇总不同类别的数据并将...

    oracle行列转换总结

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

    oracle行列转换实例

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

    SQL语句行列转换(附带数据库、表、视图操作)

    SQL 语句行列转换(附带数据库、表、视图操作) SQL 语句行列转换是数据库管理系统中的一种常见操作,它可以将数据从行转换为列,或者从列转换为行。在这个过程中,需要使用数据库管理语言(Database Management ...

    Oracle行列转换

    在处理数据时,有时我们需要将数据从行格式转换为列格式,或者反之,这一过程被称为“行列转换”。Oracle提供了多种方法来实现这样的转换,这对于数据分析、报表制作以及优化查询性能等场景非常有用。下面我们将深入...

    MSSQL行列转换存储过程

    其中,行列转换是数据处理中常见的一种需求,尤其是在进行数据分析、报表生成等场景时。本文将深入解析MSSQL中实现行列转换的存储过程及其工作原理,帮助读者理解和掌握这一关键技术。 ### MSSQL行列转换存储过程 ...

    行列互换工具毫秒级_V2.2.2行列转换.xlsm

    行列互换工具毫秒级_V2.2.2行列转换

    行列转换SQL存储过程代码

    ### 行列转换SQL存储过程代码解析 #### 核心知识点概述 本篇文章将深入探讨一个SQL存储过程的实现方式,该存储过程主要用于完成“行转列”(即行列转换)的操作。通过这种方式,可以有效地将数据库表中的行数据...

    oracle sql 行列转换

    在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...

    SQL 2008行列转换的pivot

    ### SQL 2008 行列转换 (Pivot) 的动态实现 #### 知识点一:行列转换(Pivot)的概念与应用场景 在数据库查询中,有时我们需要将数据表中的行转换为列,或者将列转换为行,这种操作被称为行列转换。行列转换在报表...

    一道java面试题 行列转换

    ### Java面试题:行列转换详解 #### 一、问题背景 在进行数据分析或者报表处理时,经常需要将数据从一种格式转换成另一种格式以便更好地展示或分析。其中一种常见的转换需求是从行转列(即行列转换)。本篇文章将...

    mysql 查询行列转换

    本篇文章将深入探讨“MySQL 查询行列转换”的概念及其实际应用,这在数据分析和报表展示时尤其重要。 行转列是数据处理中的常见需求,尤其是在数据透视或汇总分析时。在 MySQL 中,我们可以使用几种方法实现这一...

    sql查询中行列转换

    ### SQL查询中的行列转换 在数据库管理中,经常会遇到数据结构需要调整的情况,尤其是当原始数据的排列方式与实际需求不一致时。本篇文章将详细解释如何通过一条SQL查询语句实现行列转换,并且会针对两种不同的SQL ...

    Sql语句实现表的行列转换,行转列,列转行

    ### SQL语句实现表的行列转换,行转列,列转行 在处理数据库时,我们经常需要对数据进行各种变换以适应不同的分析需求。其中,“行列转换”就是一种非常实用的功能,它可以帮助我们将表中的行数据转换为列数据,...

    EXCEL 行列转换工具

    EXCEL 行列转换工具

Global site tag (gtag.js) - Google Analytics