zoukankan      html  css  js  c++  java
  • sqlServer:行列转换之多行转一行

    记得在刚进项目组时候,使用oracle数据库,遇到的第一个难题就是行列转换,哈哈,真是菜的一BI,现在使用sqlServer数据库,又遇到了,记录一下,以备后用和帮助后来者。

    言归正传:

    数据库:sqlServer2008R2 英文版

    1.建表:学生表(姓名,学科,成绩)

    CREATE TABLE teststudent(
        stuname varchar(50) NULL,
        subjects varchar(50) NULL,
        source int NULL
    )
    drop table teststudent ;
    select * from teststudent ;
    delete from teststudent ;

    2.准备数据:

    insert into teststudent(stuname,subjects,source) values('小明','语文',80);
    insert into teststudent(stuname,subjects,source) values('小明','数学',85);
    insert into teststudent(stuname,subjects,source) values('小明','英语',90);
    insert into teststudent(stuname,subjects,source) values('小红','语文',86);
    insert into teststudent(stuname,subjects,source) values('小红','数学',90);
    insert into teststudent(stuname,subjects,source) values('小红','英语',85);
    insert into teststudent(stuname,subjects,source) values('小亮','语文',99);
    insert into teststudent(stuname,subjects,source) values('小亮','数学',99);
    insert into teststudent(stuname,subjects,source) values('小亮','英语',100);

    3.转换:可以采用max()、sum()两种方式

    --方式1:
    select stuname ,
    MAX(case when subjects = '语文' then source else 0 end ) '语文',
    MAX(case when subjects = '数学' then source else 0 end ) '数学',
    MAX(case when subjects = '英语' then source else 0 end ) '英语'
    from teststudent group by stuname ;

    --方式2:
    select stuname ,
        SUM(case when subjects = '语文' then source else 0 end) '语文',
        SUM(case when subjects = '数学' then source else 0 end ) '数学',
        SUM(case when subjects = '英语' then source else 0 end ) '英语'
    from teststudent group by stuname ;

    4.其他待补充

  • 相关阅读:
    前端面试题目汇总摘录(HTML 和 CSS篇)
    The Road to learn React书籍学习笔记(第三章)
    The Road to learn React书籍学习笔记(第二章)
    算法复习:动态规划
    算法复习:回溯法
    算法复习:图
    算法复习:二叉树专题
    算法复习:最短路Dijkstra
    算法复习:BFS与DFS
    算法复习:标记数组 / 数组
  • 原文地址:https://www.cnblogs.com/zhengzeze/p/5584428.html
Copyright © 2011-2022 走看看