zoukankan      html  css  js  c++  java
  • SQL行转列

    /* 普通行列转换 (爱新觉罗.毓华 2007-11-18于海南三亚)

    假设有张学生成绩表(tb)如下:

    Name Subject Result

    张三 语文  74

    张三 数学  83

    张三 物理  93

    李四 语文  74

    李四 数学  84

    李四 物理  94 */

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

    /* 想变成 姓名 语文 数学 物理

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

     李四 74 84 94

    张三 74 83 93

    */

    create table tb

     (

     Name varchar(10) ,

    Subject varchar(10) ,

     Result int

    )

    insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)

     insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)

     insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)

    insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)

     insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)

     insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)

     go

    --静态SQL,指subject只有语文、数学、物理这三门课程。

     select name 姓名,

    max(case subject when '语文' then result else 0 end) 语文,

    max(case subject when '数学' then result else 0 end) 数学,

     max(case subject when '物理' then result else 0 end) 物理

    from tb group by name

    /* 姓名 语文 数学 物理

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

     李四 74 84 94

    张三 74 83 93

    */

    --动态SQL,指subject不止语文、数学、物理这三门课程。

    declare @sql varchar(8000) set @sql = 'select Name as ' + '姓名' select @sql = @sql + ' ,

    max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'

    from (select distinct Subject from tb) as a set @sql = @sql + ' from tb group by name'

    exec(@sql)

    /* 姓名 数学 物理 语文

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

    李四 84 94 74

    张三 83 93 74

     */

  • 相关阅读:
    管理中的“变”与“不变”
    软件项目需求分析与管理的十大疑问
    小商家也要有O2O思维
    互联网时代CIO生存法则
    浅谈项目经理与部门经理之间的关系
    沃尔玛:“最后一公里”的致命伤
    大数据分析案例:永远别忘记天气这个变量
    IT项目中的6类知识转移
    C
    linu入门
  • 原文地址:https://www.cnblogs.com/something/p/2233791.html
Copyright © 2011-2022 走看看