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

  • 相关阅读:
    多线程-工作组模式
    iOS端架构、基本组成与使用说明
    iOS,Core Animation--负责视图的复合功能
    Container Views
    IOS UIView 01-View开始深入 绘制像素到屏幕上
    View Programming Guide for iOS
    UI绘图与信息、样式
    iOS绘图框架CoreGraphics分析
    iOS开发系列--打造自己的“美图秀秀”
    Array与NSArray关系
  • 原文地址:https://www.cnblogs.com/51net/p/2824510.html
Copyright © 2011-2022 走看看