SQL多行转多列
--★转换结果如上图
1、首先创建表:
CREATE TABLE [成绩表](
[编号] [int]IDENTITY(1,1) NOT NULL,
[姓名] [varchar](50)NULL,
[语文] [numeric](5, 2)NULL,
[数学] [numeric](5, 2)NULL,
[英语] [numeric](5, 2)NULL
) ON [PRIMARY]
2、插入测试数据
INSERT INTO 成绩表([姓名],[语文],[数学],[英语])
VALUES('道一',80,100,90.8),('老二',48,56,60),('张三',88,78,90),('李四',80,90,95),('王五',67,68,56),('刘六',77,68,80)
3、执行语句进行行列转换
declare @sql_1 varchar(8000)
select @sql_1=''
select @sql_1= @sql_1 + 'select [编号],[姓名],['+name+'] AS ''成绩'','''+name+''' AS ''课程'' from 成绩表 union all '
from syscolumns where id=object_id('成绩表') and CHARINDEX(name,'编号,姓名')=0
select @sql_1= @sql_1 + ' select distinct null,null,null,null from 成绩表 '
--注意!多一行 selectdistinct null,null,null,null from 成绩表 不加会报union all错误
print @sql_1
declare @sql_2 varchar(8000)
select @sql_2='select [课程] '
select @sql_2=@sql_2 + ',SUM(case when [姓名] = '''+[姓名]+''' then 成绩 else 0 end) '''+[姓名]+''' '
from 成绩表
select @sql_2=@sql_2 + ' from ( '+@sql_1 +') as tb where ISNULL([编号],'''')<>'''' group by [课程]'
print @sql_2
execute(@sql_2)
执行行列转换后的结果如图:

4、继续添加一些数据
INSERT INTO 成绩表([姓名],[语文],[数学],[英语])
VALUES('鬼七',67,68,56),('王八',77,68,80)
5、继续执行步骤3的脚本,动态查询随表变化,结果如图:

SQL多行转多列的更多相关文章
- sql 多行转多列,多行转一列合并数据,列转行
下面又是一种详解:
- 【收藏】SQL多行变一列
CREATE TABLE DEPT (DeptNo INT IDENTITY(1, 1)NOT NULL , Country VARCHAR(50) , Location VARCHAR(50) ...
- SQL多行变一列
CREATE TABLE DEPT (DeptNo INT IDENTITY(1, 1)NOT NULL , Country VARCHAR(50) , Location VARCHAR(50) ...
- sql多行合并一列
with a as( select * from( select 1 userId , '天津' province union select 1 userId , '北京' union select ...
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
- 在mybatis中使用存储过程报错java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: PLS-00905: 对象 USER1.HELLO_TEST 无效 ORA-06550: 第 1 行, 第 7 列:
hello_test是我的存储过程的名字,在mapper.xml文件中是这么写的 <select id="getPageByProcedure" statementType= ...
- SQL Server 行转列,列转行
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- 在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列)
原文:在论坛中出现的比较难的sql问题:15(生成动态删除列语句 分组内多行转为多列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.如果去掉这个临时表中合计为0 ...
随机推荐
- 黑马程序员_ JAVA中的多线程
------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...
- 【转】nexus Maven 环境搭建
http://www.cnblogs.com/quanyongan/archive/2013/04/24/3037589.html 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组 ...
- 2008server安装Intel I217V网卡驱动
问题:由于在职的是小公司,公司服务器都是DIY的,拒绝采购品牌服务器,所以配件都是自己DIY的,这样就会出现很多兼容性问题,例如服务器主板是AUS B85-PRO-Gamer,装的是服务器系统wind ...
- 7.arm汇编 bic和orr指令
1. bic BIC指令的格式为: BIC{条件}{S} 目的寄存器,操作数1,操作数2 BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中. 操作数1应是一个寄存器, 操作数2可以是一 ...
- Spring day02笔记
spring day01回顾 编写流程(基于xml) 1.导入jar包:4+1 --> beans/core/context/expression | commons-logging 2.编写目 ...
- mgo中DBRef-数据查询测试
下午对数据查询进行了代码测试: package main import ( "crypto/rand" "encoding/hex" "fmt&quo ...
- scala.collection.immutable.HashSet$.empty()Lscala/collection/immutable/HashSet
最近重新搭了spark环境.在Master上使用了IDEA来写代码.确实很方便.我用的是hadoop2.6.spark1.5.1forhadoop2.6. scala之前用的是2.11.0老是报这个错 ...
- [珠玑之椟]浅谈代码正确性:循环不变式、断言、debug
这个主题和代码的实际写作有关,而且内容和用法相互交织,以下只是对于其内容的一个划分.<编程珠玑>上只用了两个章节20页左右的篇幅介绍,如果希望能获得更多的实例和技巧,我比较推崇<程序 ...
- GWT资料收集
1.别人的GWT笔记 http://www.blogjava.net/peacess/archive/2007/08/06/84950.html 2.GWT系统类库参考手册 http://www.bo ...
- codeforce div 377
#include <bits/stdc++.h> using namespace std; #define pb push_back #define lb lower_bound #def ...