常用的sql语句之行列转换

 

use pubs

--加上判断,如果存在表则删除 add  by liu

if exists(select 1 from sysobjects where id=object_id('t') and type='u')  //判断表的是否存在
 drop table t

--行转列
create   table   t
(
      Name         varchar(10)   ,
      Subject   varchar(10)   ,
      Result     int
)

insert   into   t(Name   ,   Subject   ,   Result)   values( '张三 ', '语文 ', '73 ')
insert   into   t(Name   ,   Subject   ,   Result)   values( '张三 ', '数学 ', '83 ')
insert   into   t(Name   ,   Subject   ,   Result)   values( '张三 ', '物理 ', '93 ')
insert   into   t(Name   ,   Subject   ,   Result)   values( '李四 ', '语文 ', '74 ')
insert   into   t(Name   ,   Subject   ,   Result)   values( '李四 ', '数学 ', '83 ')
insert   into   t(Name   ,   Subject   ,   Result)   values( '李四 ', '物理 ', '93 ')

--subject 字段数目确定.
select 姓名= name,
语文=isnull (min(case when subject='语文' then result end),0),--max 用来与分组对应,按人来分组.加上max不会产生错误,但也不会影响结果.
数学=isnull (min(case when subject='数学' then result end),0),--min或,sum一样也可以.
物理=isnull (min(case when subject='物理' then result end),0),
总计=sum(result)
from t
group by name

posted on 2008-07-28 13:53  hackenliu  阅读(330)  评论(0编辑  收藏  举报

导航