zoukankan      html  css  js  c++  java
  • SQL数据纵横列查询

    在网上找的,供大家分享。

    declare @tab table(Class varchar(20),Student varchar(20),Course varchar(50),Quantity decimal(7,2));
    insert into @tab(Class,Student,Course,Quantity) values('A班','张三','语文',60);
    insert into @tab(Class,Student,Course,Quantity) values('A班','张三','数学',70);
    insert into @tab(Class,Student,Course,Quantity) values('A班','张三','英语',80);
    insert into @tab(Class,Student,Course,Quantity) values('A班','李四','语文',30);
    insert into @tab(Class,Student,Course,Quantity) values('A班','李四','数学',40);
    insert into @tab(Class,Student,Course,Quantity) values('A班','李四','英语',50);

    insert into @tab(Class,Student,Course,Quantity) values('B班','王五','语文',65);
    insert into @tab(Class,Student,Course,Quantity) values('B班','王五','数学',75);
    insert into @tab(Class,Student,Course,Quantity) values('B班','王五','英语',85);
    insert into @tab(Class,Student,Course,Quantity) values('B班','赵六','语文',35);
    insert into @tab(Class,Student,Course,Quantity) values('B班','赵六','数学',45);
    insert into @tab(Class,Student,Course,Quantity) values('B班','赵六','英语',55);
    select * from @tab

    select Class,Student
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='语文') as '语文'
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='数学') as '数学'
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='英语') as '英语'
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student) as '总分'
    from @tab as t
    group by Class,Student


    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
    ,avg(语文) as 语文
    ,avg(数学) as 数学
    ,avg(英语) as 英语
    ,avg(总分) as 总分
    from (
    select Class,Student
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='语文') as '语文'
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='数学') as '数学'
    ,(select isnull(sum(Quantity),0) from @tab where class="t".Class and Student=t.Student and Course='英语') as '英语'
    ,(select isnull(sum(Quantity),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

    运行结果:

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/findchance/p/2698258.html
Copyright © 2011-2022 走看看