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中的行转列和列转行的问题的更多相关文章

  1. 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 ...

  2. Sql中判断"库、表、列,视图,存储过程"是否存在

    --判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER.sys.sysdatabases WHERE NAME = '库名') PRINT 'exists ' else ...

  3. sql server 多行数据合并成一列

    首先是源数据: ),cip.CheckIn_StartTime, )),cip.CheckIn_EndTime, )),cip.Rental_Price)) as content from Check ...

  4. SQL中 根据行号设置每行数据的排序数值

    根据行号自动把当前行号插入到某列中 实现排序 update tempTable set DisplayOrder = right( CAST(rownum as NVARCHAR),5) from(  ...

  5. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  6. 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作

    开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...

  7. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

  8. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  9. (转载)重温SQL——行转列,列转行

    原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通 ...

随机推荐

  1. javascript第二弹——函数

    什么是函数 函数是一块javascript代码,被定义一次,就可以执行和调用多次:函数也是js对象,所以也可以像对象那样操作和传递:所以我们也把函数称之为函数对象: 创建函数的几种方法 一.函数声明 ...

  2. 低调的华丽,Windows Server 2003 ... 写给厌倦了XP,但又纠结于vista/win7花哨的童鞋(转)

    发布于2001年10月25日的windows XP 距今已近8年 时间, 微软从没有一个操作系统能像XP那样  坚挺这么久,婚姻既有7年之痒,何况用了8年XP的广大 同学,但07年发布的vista似乎 ...

  3. CUDA/OpenCL 学习资料

    VS2010 NVIDIA OpenCL 开发环境配置 CUDA 在线课程 [经典培训] 全球首套中文CUDA 教程-胡文美教授主讲

  4. 【iCore2双核心板视频教程】 AD模块(iM_AD_GP和iM_AD_SYNC)介绍及数据采集实验三

    建议设定成 “超清” 模式并 “全屏” 观看. ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiao ...

  5. MuPlayer『百度音乐播放内核』

    MuPlayer『百度音乐播放内核』 —— 跨平台.轻量级的音频播放解决方案. 多端(PC & WebApp)通用,统一的API调用方式 HTML5 Audio与Flash内核的平滑切换(支持 ...

  6. Unix时间戳(Unix timestamp)转换工具

    http://tool.chinaz.com/Tools/unixtime.aspx 现在的Unix时间戳(Unix timestamp)是   1440732364         Unix时间戳( ...

  7. Rails--bundle exec rake db:migrate

    --新建表: def up create_table :[TABLE_NAME] do |t| t.column :[NUM], :integer t.column :[NAME], :string ...

  8. [转]硬盘分区表知识——详解硬盘MBR

    http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神奇,是因为 ...

  9. MVC @functions

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  10. C# 如何读取一行中的所有变量

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...