数据库数据横竖转换


昨天跑去面试,一个小公司,第一次面试。进去直接笔试,拿着笔动了起来,结果一看题目傻了眼,第一个题目,j简要介绍一下webservice。不知道动笔,然后继续往下看,delegate(委托)的应用,我想说,好吧,我是学的Java,不是.net,虽说.net也学了,但是那是一年前的事情了,那时候学也学的很浅,根本没理解,况且一年没有用过,早扔到九霄云外去了。然后就是数据的问题了,一看,我的拿手好戏,我以为是简单的,谁知道一看就傻了眼,一个表,有姓名,科目,成绩三列,然后六条数据,张三,语文,81,张三,数学,90,张三,英语,90.还有李四的,和张三的数据一样,要转换成姓名,语文,数学,英语这样一个表格。真心不知道做。虽说没做出来,但是那个项目经理人还不错,给我面试机会,然后给我说,要我平时多积累基础知识,和我谈了不少问题。然后,这次面试就say goodbye了。回了学校,我开始动手在网上查那个数据横竖转换的问题,一看,还不少。主要是两种方法。一种是用group by语句,加上case when  then,还有一种,就是用pivot这个关键词来完成转换。贴代码,首先是建表

create  table T_table (
name  varchar(20) not null,
subject varchar(20),
score  int
)
insert into T_table  values('张三','语文','80')
insert into T_table  values('张三','数学','82')
insert into T_table  values('张三','英语','78')
insert into T_table  values('李四','语文','90')
insert into T_table  values('李四','数学','92')
insert into T_table  values('李四','英语','98')

查询结果如下:

但是要得到如下结果:

sql语句为:

select  name as '姓名', sum(case subject when '语文'  then  score else '' end) as 语文,
sum(case subject when '数学'  then  score else '' end) as 数学,
sum(case subject when '英语'  then  score else '' end) as 英语
from T_table  group  by  name
这是第一种方式,还有另外一种方式:
select  name as '姓名' ,语文 ,数学, 英语
from T_table as a pivot (max(score) for subject in(语文,数学,英语)) as b
第二种方式只能用在sqlserver 2005中,2000不支持pivot函数,不过相信应该没有几个人能用sqlserver 2000

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值