sql中的行转列和列转行的问题
sql中的行转列和列转行的问题
这是一个常见的问题,也是一个考的问题
1.行转列的问题
简单实例
CREATE TABLE #T
(
MON1 INT,
MON2 INT,
MON3 INT
)
GO
INSERT INTO #T VALUES(1,2,3)
GO
SELECT * FROM #T --行转列;(union all) SELECT MON1 FROM #T
UNION ALL
SELECT MON2 FROM #T
UNION ALL
SELECT MON3 FROM #T
GO --最后的优化
SELECT * FROM (
SELECT MON1 FROM #T
UNION ALL
SELECT MON2 FROM #T
UNION ALL
SELECT MON3 FROM #T
) T
较为复杂的实例

具体实现代码
--创建表
GO
CREATE TABLE #T1(
NAME NVARCHAR(100),
CHINESE NVARCHAR(100),
MATH NVARCHAR(100),
ENGLISH NVARCHAR(100)
)
--插入模拟数据
SELECT * FROM #T1
GO
INSERT INTO #T1 VALUES('张三',80,90,90)
INSERT INTO #T1 VALUES('李四',47,78,null)
INSERT INTO #T1 VALUES('王五',null,90,null)
GO
SELECT * FROM #T1 --具体代码实现
GO
SELECT * FROM (
SELECT NAME AS '姓名','语文' AS '科目',CHINESE AS '成绩' FROM #T1
UNION ALL
SELECT NAME AS '姓名','数学' AS '科目',MATH AS '成绩' FROM #T1
UNION ALL
SELECT NAME AS '姓名','英语' AS '科目',ENGLISH AS '成绩' FROM #T1
) T
order by T.姓名
解决方法二
--列转行的静态方案:UNPIVOT,sql2005及以后版本
--方法二;这个方法 会自动去除值为 NULL 的值
SELECT NAME,OBJ,GRADE
FROM #T1
UNPIVOT(GRADE FOR OBJ IN (CHINESE,MATH,ENGLISH)) AS UP
网络上 还流行这个方法
INFORMATION_SCHEMA.COLUMNS视图中获取列来构造行,同样也使用了XML处理。
2 列转行
简单实例
CREATE TABLE #T0
(
MON1 INT
)
INSERT INTO #T0 VALUES(1)
INSERT INTO #T0 VALUES(2)
INSERT INTO #T0 VALUES(3) SELECT * FROM #T0
--方法一 仅仅限制于 数据不重复的情况下
SELECT
(SELECT MON1 FROM #T0 WHERE MON1=1) '',
(SELECT MON1 FROM #T0 WHERE MON1=2) '',
(SELECT MON1 FROM #T0 WHERE MON1=3) ''
更多较好的实例:
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
sql中的行转列和列转行的问题的更多相关文章
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
Expression构建DataTable to Entity 映射委托 1 namespace Echofool.Utility.Common { 2 using System; 3 using ...
- Sql中判断"库、表、列,视图,存储过程"是否存在
--判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER.sys.sysdatabases WHERE NAME = '库名') PRINT 'exists ' else ...
- sql server 多行数据合并成一列
首先是源数据: ),cip.CheckIn_StartTime, )),cip.CheckIn_EndTime, )),cip.Rental_Price)) as content from Check ...
- SQL中 根据行号设置每行数据的排序数值
根据行号自动把当前行号插入到某列中 实现排序 update tempTable set DisplayOrder = right( CAST(rownum as NVARCHAR),5) from( ...
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
- 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作
开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- (转载)重温SQL——行转列,列转行
原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通 ...
随机推荐
- LeetCode-Repeated DNA Sequences (位图算法减少内存)
Repeated DNA Sequences All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, ...
- tomcat配置虚拟目录映射
本文主要介绍web虚拟目录映射的两种常用方法及配置默认web应用的方法 一.在Server.xml中进行配置 在<Host>元素中添加子元素<Context path=" ...
- 象写程序一样写博客:搭建基于github的博客
象写程序一样写博客:搭建基于github的博客 前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...
- mysql5.6安装
mysql5.6安装 #卸载原有的mysqlyum remove mysql*ls /etc/my.cnf*mv /etc/my.cnf* /tmp/ #安装依赖包yum install make c ...
- 去掉网址中的 html编码
修改 web\urlManager createUrl函数,去掉 urlEncode函数
- 利用poi开源jar包操作Excel时删除行内容与直接删除行的区别
一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是: void removeRow(Row row)//Remove a row fro ...
- ie8默认主页/起始页无法修改
HKEY_CURRENT_USER\Software\Policies\Microsoft 展开Microsoft,查看其下是否包含子项 Internet Explorer? 若有,请删除.这一步应该 ...
- Apache Spark源码走读之4 -- DStream实时流数据处理
欢迎转载,转载请注明出处,徽沪一郎. Spark Streaming能够对流数据进行近乎实时的速度进行数据处理.采用了不同于一般的流式数据处理模型,该模型使得Spark Streaming有非常高的处 ...
- tomcat启动报错:IOException while loading persisted sessions: java.io.EOFException.
tomcat启动错误代码: 严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFExce ...
- 通过SocketLog快速分析OneThink程序
通过SocketLog快速分析OneThink程序 http://www.thinkphp.cn/topic/10846.html 浏览:2332 发布日期:2014/02/08 分类:技术分享 ...