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

时间: 2024-09-26 01:44:41

sql纵向表转成横向表的相关文章

word怎么将纵向页面改成横向页面

  word怎么将纵向页面改成横向页面 更改纸张方向 1.打开word,点击[页面布局],如下图. 2.点击[纸张方向],如下图,选择你需要的方向. 3.最终效果如下图所示. 更改纸张大小 1.点击[页面布局],如下图. 2.点击[纸张大小],如下图,下拉菜单中选择你想要的纸张大小,如A3,A4等 最终效果如下图.

php实现两表合并成新表并且有序排列的方法_php技巧

本文实例讲述了php实现两表合并成新表并且有序排列的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <?php /** la (3,5,8,11) lb(2,6,8,9,11,15) 合并为lc,有序排列. 用php实现,不能用sort之类的函数!!!! **/ class union {     var $lista = array();     var $listb = array();     var $listc = array();          funct

php实现两表合并成新表并且有序排列的方法

 具体实现方法如下:   代码如下: <?php /** la (3,5,8,11) lb(2,6,8,9,11,15) 合并为lc,有序排列. 用php实现,不能用sort之类的函数!!!! **/ class union {     var $lista = array();     var $listb = array();     var $listc = array();          function getlenght($arr) { //获得表长度         retur

php 两表合并成新表并且有序排列

<?php /** la (3,5,8,11) lb(2,6,8,9,11,15) 合并为lc,有序排列. 用php实现,不能用sort之类的函数!!!! **/ class union {     var $lista = array();     var $listb = array();     var $listc = array();         function getlenght($arr) { //获得表长度         return count($arr);     }

select-vs2010C#Web开发3个Dropdown控件从sql数据库中的4个表显示数据

问题描述 vs2010C#Web开发3个Dropdown控件从sql数据库中的4个表显示数据 实现效果:第一个下拉控件是选择学院,第二个下拉控件是选择系部,第三个下拉控件是选择班级.从网上找了个后台代码:前台: <%@ Page Language=""C#"" AutoEventWireup=""true"" CodeFile=""StudInfo.aspx.cs"" Inheri

步步学LINQ to SQL:将类映射到数据库表

该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定.即使你选择使用了自动生成类的工具,理解这一实现过程可以让你更加方便地对你的应用程序加以扩展. 下面阐述本文的目标以及该示例程序为初级开发人员介绍如何学习LINQ的基本要点: ·使用LINQ to SQL将SQL Server数据库表映射到与之关联的对象上. ·执行一些简单的LINQ查询来检索数据. 本文详细为你阐述了如何在你的应用程序中

ORACLE普通表转换成分区表

oracle官方建议当表的大小大于2GB的时候就使用分区表进行管理,分区表相对于小的表管理和性能上都有很大的优势,本文档暂时不介绍具体的优势,主要介绍几种普通表转换成分区表的方法:[方法概述]oracle官方给了以下四种操作的方法:  A)  Export/import method(导入导出)  B)  Insert with a subquery method(插入子查询的方法)  C)  Partition exchange method(交换分区法)  D)  DBMS_REDEFINI

SQL 基础--&amp;gt;创建和管理表

--================================= --SQL 基础-->创建和管理表 --=================================   一.创建表:create table     1.语法:CREATE TABLE  [ 用户名. ] 表名          (列名 数据类型 [ default 默认值] [ 约束条件]  [ , ......]  )         TABLESPACE 表空间名       2.表名和列名命名规则:     

使用IBM Data Movement Tool从SQL Server/Oracle到DB2的表数据迁移

SQL Server,Oracle 及 DB2 都是目前市场上很多应用程序所使用的关系型数据库,随着应用程序功能的日趋强大,应用程序的版本升级和重新安装都将要求保留原有数据.这样不同类型数据库之间的迁移成了现在应用程序功能中数据迁移部分的重点.目前市场上出现了一些数据库迁移工具(比如:IBM Data Movement Tool).互联网上针对这些工具的介绍大部分都是基于数据对象的整体迁移,也就是在数据结构迁移的基础上进行数据迁移.但是有些应用程序并不需要数据结构的迁移,而是仅仅需要表数据的迁移