• 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.其他待补充

  • 相关阅读:
    微信小程序学习心得
    微信小程序分类的实现
    Vue实例中封装api接口的思路 在页面中用async,await调用方法请求
    Vue中封装axios组件实例
    使用creata-react-app脚手架创建react项目时非常慢的问题
    Javascript的对象
    vue中上拉加载数据的实现
    Vue中键盘事件
    vant学习网址
    字符串,字典,数组写入本地文件和从本地文件读取
  • 原文地址:https://www.cnblogs.com/zhengzeze/p/5584428.html
Copyright © 2020-2023  润新知