http://blog.sina.com.cn/s/blog_604fb7ae0100pfgg.html

有时为了使数据记录显示的更直观,会需要将记录横向显示。例如航空公司仓位数据表有这样的记录(如图所示):

是不是感觉很难快速看完,在这些数据中每个航空公司都是重复的,不易理解。为了解决这个问题需要以下语句:

select max(carrier) as 航空公司,max(case cabin when 'A' then cabin else '-' end) as A舱,
       max(case cabin when 'B' then cabin else '-' end) as B舱,
       max(case cabin when 'C' then cabin else '-' end) as C舱,
       max(case cabin when 'D' then cabin else '-' end) as D舱,
       max(case cabin when 'E' then cabin else '-' end) as E舱,
       max(case cabin when 'F' then cabin else '-' end) as F舱,
       max(case cabin when 'G' then cabin else '-' end) as G舱,
       max(case cabin when 'F' then cabin else '-' end) as F舱,
       max(case cabin when 'H' then cabin else '-' end) as H舱,
       max(case cabin when 'H1' then cabin else '-' end) as H1舱,
       max(case cabin when 'J' then cabin else '-' end) as J舱,
       max(case cabin when 'K' then cabin else '-' end) as K舱,
       max(case cabin when 'L' then cabin else '-' end) as L舱
    from table group by carrier

SQL执行结果如图所示:


   以上的写法是在固定字段的情况下可以使用这种SQL语句,但是飞机舱位是动态的,会增加H1舱位、D1舱位,如果用上面的写法刚刚添加的D1舱位会显示不出。为了解决这个问题,必须使用动态SQL写法,用存储过程实现。

create proc proDiscount
   as
   declare @sql varchar(8000)
   set @sql = 'select max(cabin) as 航空公司'
   select @sql = @sql+', max(case cabin when '''+cabin+''' then cabin else ''-'' end) as '''+cabin+'''' from (select cabin from table group by cabin)as a
   set @sql= @sql +' from table group by carrier'
   exec(@sql)
   print @sql

exec proDiscount

select cabin from table group by cabin 查出共有多少种类的舱位,结果是
"A,B,C,D,E,F,G,H,H1,Y,Y1,Y2"
只要用了这条语句,其他添加的舱位也会查出来,这样就不会有漏掉舱位的情况。

http://blog.sina.com.cn/s/blog_407d66af0100b4s7.html

数据库表中这样把横向记录纵向显示

普通行列转换
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74   84   94
张三 74   83   93
-------------------
*/

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go

--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
  max(case 课程 when '语文' then 分数 else 0 end) 语文,
  max(case 课程 when '数学' then 分数 else 0 end) 数学,
  max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名

--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)

--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')

将数据表的纵向数据横向显示相关推荐

  1. Mysql 横向数据表变纵向数据表

    今天碰到一个有趣的题目,这真熬人啊,脑思路没写注释前,间接性宕机 n次. 如图: 看一下,是不是凭借多年(7year+)的经验,是不是很简单? 真的有那么简单吗? 是的,就是有那么简单,只是花费了我1 ...

  2. sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...

    本话旨在完成以下内容: 在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位.换句话说我们操作数据库其实重要的就是操作数据表.本章将详细介绍数据表的基本操作,主要内容包括:创建数据 ...

  3. xampp mysql创建表_xampp怎样创建数据表和删除数据表 来学习吧

    xampp新建好数据库之后,怎样新建数据表呢?今天咪咪我就来讲解一下xampp中怎样创建数据表和删除数据表. 工具/材料 电脑 电脑 xampp 操作方法 01 如图,单击选中已经创建好的数据库. 0 ...

  4. mysql数据表操作_MySQL数据表基本操作实例详解

    本文实例讲述了MySQL数据表基本操作.分享给大家供大家参考,具体如下: 数据表的基本操作 1.主键约束要求主键列的数据唯一,并且不允许为空.主键能够唯一地识别表中的一条记录,可以结合外键来定义不同数 ...

  5. MongoDB的基本操作(创建数据库,数据表,查询数据表信息)

    今天,因为有朋友想要了解MongoDB的基本操作.所以,我就写一篇关于MongoDB的文章,占个坑以后有时间研究MongoDB再正式的写MongoDB的文章.关于MongoDB的安装,可以参考一下我的 ...

  6. 数据库实验报告 设计便利店数据表、商品数据表 查询需要上货的商品列表 SQL Kingbase

    一.实验题目 已有条件:假设你拥有多个连锁便利店,名字不一样,每个便利店有店名.国家.城市.地址等信息要登记,每个便利店有多种商品要登记,包括商品ID.商品名称等信息.每个店销售的商品种类.价格和促销 ...

  7. mysql视图数据更新_怎么更新Mysql数据表视图中数据

    本篇文章主要给大家介绍mysql数据表中视图中数据的更新操作. 相关mysql视频教程推荐:<mysql教程> mysql数据表视图的定义及相关操作,如查询.修改.删除.添加等操作介绍,在 ...

  8. MYSQL数据库数据表创建以及数据操作命令汇总

    说明: 1.语句中的小写单词无实意,实际操作时请根据实际情况进行设定或者配置. 2.本文档中的语句属于记忆查询,不适合新手学习之用,新手学习请查询其他文档. 1.数据库创建删除 CREATE DATA ...

  9. Python使用SQLAlchemy连接数据库并创建数据表、插入数据、删除数据、更新表、查询表(CRUD)

    Python使用SQLAlchemy连接数据库并创建数据表.插入数据.删除数据.更新表.查询表(CRUD) 目录 Python使用SQLAlchemy连接数据库并创建数据表 #SQLAlchemy # ...

最新文章

  1. 3、Python字典集合
  2. 图片镂空算法集合[图](转)
  3. SCANF SCANF_S
  4. java填空题 在非静态成员方法中_Java程序设计填空和改错题(参考答案)
  5. BZOJ1015 JSOI2008 星球大战starwars 并查集
  6. 同事都说有SQL注入风险,我非说没有
  7. linux git ssh_Git年满13岁,可以了解Linux和SSH命令,Python编程等等
  8. java sleep 精度,java – Thread.sleep(x)是否足以在Android中用作时钟?
  9. Hibernate学习笔记_核心幵发接口及三种对象状态
  10. [sql]join的5种方式:inner join、left(outer) join、right (outer) Join、full(outer) join、cross join...
  11. 获取GridView的EmptyDataTemplate中的控件
  12. 网络创业理论与实践(网络通识)
  13. excel文件的工作表保护密码忘记了
  14. [二分]Kayaking Trip
  15. 【Android -- 面试】简历模板
  16. java接口返回pdf时修改文件名称问题
  17. 后台管理系统Login 页面(部分)
  18. 张小庆,在路上-开始(2)第一天上班
  19. C#实现将RGB颜色值转换为0x颜色代码
  20. Dell T630服务器风扇持续高速运行解决方案

热门文章

  1. android原生系统手机游戏,ROG真游戏手机系统主页面有三大虚拟按键!安卓原生系统?...
  2. 2019北航计科保研夏令营(非优营)
  3. 拆解下3个大厂(抖音,滴滴,拼多多)的数据分析案例
  4. BackupPC - 恢复选项Restore options
  5. et文件怎么转成excel_excel怎么转换成word格式的文件格式?这些方法应该掌握!...
  6. 带你玩转kubernetes-k8s(第61篇-Kubernetes之资源紧缺时的Pod驱逐机制)
  7. 奈奎斯特采样定理之我见
  8. 开发media play,realplayer,暴风影音 等主流播放器视频特效插件
  9. Camera 的3A
  10. 手机上怎么在线生成gif?1分钟教你手机图片合成gif