常用的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