首页 新闻 会员 周边

用sql,大家帮帮忙!

0
悬赏园豆:50 [已解决问题] 解决于 2012-08-21 20:34

已知数据表数据如(表一),请将它动态显示成(表二)格式

 

create table StudentInfo(Sname varchar(10) , Subject varchar(10) , Scorefloat)

insert into StudentInfo values('张三' , '.Net' , 80)

insert into StudentInfo values('张三' , 'JAVA' , 85)

insert into StudentInfo values('张三' , 'SQL' , 95)

insert into StudentInfo values('李四' , '.Net' , 86)

insert into StudentInfo values('李四' , 'JAVA' , 92)

insert into StudentInfo values('王五' , '.Net' , 96)

insert into StudentInfo values('王五' , 'JAVA' , 88)

insert into StudentInfo values('王五' , 'SQL' ,78)

 

姓名

课程

成绩

张三

.Net

80

张三

JAVA

85

张三

SQL

95

李四

.NET

86

李四

JAVA

92

王五

.NET

96

王五

JAVA

88

王五

SQL

78

姓名

.NET

JAVA

SQL

张三

80

85

95

李四

86

92

 

王五

96

88

78

          (表一)                                     (表二)

小兴o………o的主页 小兴o………o | 初学一级 | 园豆:141
提问于:2012-05-03 16:52
< >
分享
最佳答案
0

使用PIVOT的写法

SELECT Sname, ISNULL([.Net], '') [.Net], ISNULL([JAVA], '') [JAVA], ISNULL([SQL],'') [SQL]
FROM StudentInfo PIVOT ( MAX(Score) FOR [Subject] IN ( [.Net], [JAVA], [SQL] ) ) AS PivotTable
  

参考内容:

SQL Server中行列转换 Pivot UnPivot

http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html

收获园豆:20
acepro | 小虾三级 |园豆:1218 | 2012-08-21 20:28
其他回答(3)
0

selectA1.姓名,
select sum(A.课程) from A WHERE A1.姓名=A.姓名 AND A1.NET=A.NETas '.NET',
select SUM( A.课程) from A WHERE A1.姓名=A.姓名 AND A1.JAVA=A.JAVAas 'JAVA',
select sum(A.课程) from A WHERE A1.姓名=A.姓名 AND A1.SQL=A.SQLas 'SQL'
from A A1
group by A1.姓名

收获园豆:30
無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:11

能解释下不,看不太懂!

支持(0) 反对(0) 小兴o………o | 园豆:141 (初学一级) | 2012-05-03 17:17

@小兴o………o: ID CLASS SCORE
------ ---------- ----------
1 language 78
2 english 98
3 maths 94
1 maths 85
2 maths 56
---------------------------------------------
select id,sum(decode(class,'language',score,0)) "语文",
sum(decode(class,'english',score,0)) "英语",
sum(decode(class,'maths',score,0)) "数学"
from tp1
group by id--------------------用动态SQL  语句,Score是不定数的

ID 语文 英语 数学
------- ---------- ---------- ----------
1 78 0 85
2 0 98 56
3 0 0 94

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:20

@無限遐想: 先 以姓名分组。对于一个类型,进行查询,得到结果。给了 一个列名。

道理 其实是一样的。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:23

@無限遐想: http://topic.csdn.net/u/20090515/12/ee9a595e-b0bd-4ee2-899d-d8024d0a481b.html

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:29

@無限遐想: selectA1.姓名,
sum(case A1.课程 when ‘.NET’ )as '.NET',
sum(case A1.课程 when ‘JAVA’ )as 'JAVA',
sum(case A1.课程 when ‘SQL’ )as 'SQL'
from A A1
group by A1.姓名

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:34

@無限遐想: select PDLIID,
SUM(case MODELSID when 34 then 1 end ) as '34'  from Efficiency GROUP BY PDLIID

 selectA1.姓名,sum(case A1.课程 when ‘.NET’  then A1.成绩 END)as '.NET',
sum(case A1.课程 when ‘JAVAthen A1.成绩 ENDas 'JAVA',
sum(case A1.课程 when ‘SQLthen A1.成绩 ENDas 'SQL'
from A A1
group by A1.姓名

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-03 17:45
0

select
Sname,
max(case Subject when 'JAVA' then Scorefloat else 0 end) 'JAVA',
max(case Subject when '.Net' then Scorefloat else 0 end) '.Net',
max(case Subject when 'SQL' then Scorefloat else 0 end) 'SQL'
from StudentInfo
group by Sname

木兰香 | 园豆:252 (菜鸟二级) | 2012-05-04 08:47
0

行转列的问题,sql2005中有个函数:PIVOT,具体用法可查demo

--宁静以致远-- | 园豆:364 (菜鸟二级) | 2012-05-04 09:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册