zoukankan      html  css  js  c++  java
  • sql纵向表转成横向表

    declare @tab table(Class varchar(20),Student varchar(20),Course varchar(50),Grades decimal(7,2));
    insert into @tab(Class,Student,Course,Grades) values('A班','张三','语文',60);
    insert into @tab(Class,Student,Course,Grades) values('A班','张三','数学',70);
    insert into @tab(Class,Student,Course,Grades) values('A班','张三','英语',80);
    insert into @tab(Class,Student,Course,Grades) values('A班','李四','语文',30);
    insert into @tab(Class,Student,Course,Grades) values('A班','李四','数学',40);
    insert into @tab(Class,Student,Course,Grades) values('A班','李四','英语',50);
    insert into @tab(Class,Student,Course,Grades) values('B班','王五','语文',65);
    insert into @tab(Class,Student,Course,Grades) values('B班','王五','数学',75);
    insert into @tab(Class,Student,Course,Grades) values('B班','王五','英语',85);
    insert into @tab(Class,Student,Course,Grades) values('B班','赵六','语文',35);
    insert into @tab(Class,Student,Course,Grades) values('B班','赵六','数学',45);
    insert into @tab(Class,Student,Course,Grades) values('B班','赵六','英语',55);

    select * from @tab

    select
        (case when Grouping(Class)=1 then '总平均' when Grouping(Student)=1 then '' else Class end ) as Class
        ,(case when Grouping(Class)=1 then '' when Grouping(Student)=1 then '平均' else Student end) as Student
        ,cast(avg(语文) as decimal(7,2)) as 语文
        ,cast(avg(数学) as decimal(7,2)) as 数学
        ,cast(avg(英语) as decimal(7,2)) as 英语
        ,cast(avg(总分) as decimal(7,2)) as 总分
    from (
        select Class,Student
        ,(select isnull(sum(Grades),0) from @tab where class="t".Class and Student=t.Student and Course='语文') as '语文'
        ,(select isnull(sum(Grades),0) from @tab where class="t".Class and Student=t.Student and Course='数学') as '数学'
        ,(select isnull(sum(Grades),0) from @tab where class="t".Class and Student=t.Student and Course='英语') as '英语'
        ,(select isnull(sum(Grades),0) from @tab where class="t".Class and Student=t.Student) as '总分'
        from @tab as t
        group by Class,Student
        ) as tempTab
    group by Class,Student,语文,数学,英语,总分 with rollup
    having Grouping(语文)=1
        and Grouping(数学)=1
        and Grouping(英语)=1


    SQL语句之普通行列转换

    假设有张学生成绩表(Result)如下
    Name Subject Result
    张三 语文  73
    张三 数学  83
    张三
    物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94


    建表:


    create TABLE TABLE1 (Name varchar(50),Subject varchar(50),Result int)

    INSERT INTO TABLE1 VALUES('张三','语文','73')
    INSERT INTO TABLE1
    VALUES('张三','数学','83')
    INSERT INTO TABLE1 VALUES('张三','物理','93')
    INSERT
    INTO TABLE1 VALUES('李四','语文','74')
    INSERT INTO TABLE1
    VALUES('李四','数学','84')
    INSERT INTO TABLE1 VALUES('李四','物理','94')



    想变成
    姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94


    declare @sql varchar(4000)
    set @sql = 'select Name as ' + '姓名'
    select
    @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end)
    ['+Subject+']'
    from (select distinct Subject from TABLE1) as a
    set @sql =
    @sql + ' from TABLE1 group by name'
    exec(@sql)


    如果上述两表互相换一下:即
    表名(cj)
    姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94


    想变成


    Name Subject Result
    张三 语文  73
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四
    数学  84
    李四 物理  94


    select 姓名 as Name,'语文' as Subject,语文 as Result from CJ union
    select 姓名 as
    Name,'数学' as Subject,数学 as Result from CJ union
    select 姓名 as Name,'物理' as
    Subject,物理 as Result from CJ
    order by 姓名 desc

  • 相关阅读:
    SSAS 内部错误:操作未能成功
    无法从项目中获取SSIS包的列表
    新特技软件(Analyzer)添加新用户
    cmd命令搜集
    面试中--js注意事项(小知识点)
    面试的一般需求
    函数----let和const
    函数----箭头函数
    vuex的相关知识
    js中,数组去重的方法的总结(温故而知新)
  • 原文地址:https://www.cnblogs.com/51net/p/2824510.html
Copyright © 2011-2022 走看看