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 ...
随机推荐
- Linux进程切换代码分析
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这次我们来分析L ...
- 性能测试框架Locust初学笔记
Locust初探 Locust是一款类似于Jmeter开源负载测试工具,所不同的是它是用python实现,并支持python脚本. locust提供web ui界面,能够方便用户实时监控脚本运行状态. ...
- MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题
///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...
- Fliwer:监控植物状态 实现远程浇水
Fliwer是一款针对植物而研发出来的设备,可以监控土壤水分.光照.温度.空气湿度和肥料是否充足这些指标.结合云端的植物数据和天气预报,它能够自动决定什么时候给植物浇水,甚至提醒你什么时候应该施肥.修 ...
- PIC32MZ tutorial -- Watchdog Timer
Watchdog is a very necessary module for embedded system. Someone said that embedded system operates ...
- SQL Server添加MDW性能监控报表(转载)
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- PHP echo 即时输出
header(“Content-type:text/html;charset=utf-8″); #设置执行时间不限时 set_time_limit(0); #清除并关闭缓冲,输出到浏览器之前使用这个函 ...
- http的应用httpurlconnection--------1
http请求后获得所需要的是字符串的时候 URL url=new URL(strurl); try { HttpURLConnection conn=(HttpURLConnection) url.o ...
- Python list方法总结
1. 向列表的尾部添加一个新的元素 append(...) L.append(object) -- append object to end 1 2 3 4 >>> a = ['sa ...
- VC++ 在控件上写字时 字体的设置技巧
//人物照片下方的文字 CFont* nFont = &afxGlobalData.fontRegular; CFont* oFont = pDc->SelectObject(nFont ...