这个select语句怎么写啊?
原题是这样的:
编号 姓名 科目 成绩
001 张三 物理 79
001 张三 语文 80
001 张三 数学 85
002 李四 英语 79
002 李四 语文 89
002 李四 电脑 90
要用select语句把它改为以下的样子:
001 张三 物理 79
语文 80
数学 85
002 李四 英语 79
语文 89
电脑 90
------解决方案-------------------- create table #t(编号 varchar(100),姓名 varchar(100),科目 varchar(100),成绩 int)
insert into #t
select '001 ', '张三 ', '物理 ',79 union all
select '001 ', '张三 ', '语文 ',80 union all
select '001 ', '张三 ', '数学 ',85 union all
select '002 ', '李四 ', '英语 ',79 union all
select '002 ', '李四 ', '语文 ',89 union all
select '002 ', '李四 ', '电脑 ',90
--增加自动编号列
alter table #t add id int identity(1,1)
go
select
case when id=(select min(id) from #t where 编号=a.编号) then 编号 else ' ' end as 编号,
姓名,
科目,
成绩
from #t as a
order by id
drop table #t
------解决方案--------------------如果按照表中的次序,可以直接查询:
select case when not exists(select 1 from tablename where 编号=a.编号 and 科目 <a.科目) then a.编号 else null end as 编号,
case when not exists(select 1 from tablename where 编号=a.编号 and 科目 <a.科目) then a.姓名 else null end as 姓名,
科目,成绩
from tablename a
order by a.编号,a.科目
------解决方案--------------------select case rn when 1 no else ' ' end as no,
case rn when 1 name else ' ' end as name,
subject,score
from
(
select *,(select count(1) from tb where no=t.no and subject <=t.subject) rn
from tb
)t