如何将表的横数据转换为纵数据
欲将如下相互表格转换:
表格一:
第一学期 第二学期
姓名 性别 语文 数学 语文 数学 音乐 .....
张三 男 85 70
李四 女 89 90
........
表格二:
姓名 性别 学期 科目 得分
张三 男 一 语文 85
张三 男 一 数学 70
张三 男 二 语文 85
张三 男 二 数学 70
李四 女 一 语文 89
李四 女 一 数学 90
李四 女 二 语文 89
李四 女 二 数学 90
应该如何处理?
谢谢
问题点数:20、回复次数:7Top
1 楼lanbaibai(蓝白白)回复于 2004-12-05 00:23:39 得分 0
怎么没人知道吗?Top
2 楼ropriest(馆主)回复于 2004-12-05 00:45:22 得分 0
表格1里面也应该有学期这个字段吧,你这是报表还是数据库表结构啊?Top
3 楼djkhym(兵卒)回复于 2004-12-05 09:46:08 得分 10
create table #tmp(id int identity(1,1),name varchar(10),sex varchar(4),period varchar(2),
subject varchar(10),credit float)
insert into #tmp(name,sex,period,subject)
select 姓名 as name,性别 as sex,学期 as period,语文1 as subject
insert into #tmp(name,sex,period,subject)
select 姓名 as name,性别 as sex,学期 as period,数学1 as subject
.......后面相似
最后从临时表中提取数据
select * from #tmp
Top
4 楼taoyb(tyb)回复于 2004-12-05 10:27:03 得分 0
只能用 select name,sex,学期,语文 as 科目 insert into #temp1
union
....................
Top
5 楼wjwboy(王建)回复于 2004-12-05 11:43:26 得分 0
create table aa (bb int,cc int ,b1 char(8))
go
select * from aa
go
--------------------
11 2 bbb
11 1 aaa
12 1 uio
12 2 klj
--------------------
select bb, max(case cc when 1 then b1 else '' end ),max(case cc when 2 then b1 else ' ' end) from aa
group by bb
go
---------------------
11 aaa bbb
12 uio klj
---------------------
Top
6 楼aohan(aohan)回复于 2004-12-05 11:52:52 得分 0
老大写过这样的贴子,找一下就可以了Top
7 楼631799(杭州工人)回复于 2004-12-05 14:36:39 得分 10
declare @s varchar(8000)
set @s=''
select @s=@s+',['+科目+']=max(case 科目 when '''+科目+''' then 得分 end)'
from 表 group by 科目 order by 科目 desc
exec('select 姓名,性别+@s+'
from 表
group by 姓名,性别)
goTop




