已知数据表数据如(表一),请将它动态显示成(表二)格式
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 |
(表一) (表二)
使用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
参考内容:
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
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.姓名
能解释下不,看不太懂!
@小兴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
@無限遐想: 先 以姓名分组。对于一个类型,进行查询,得到结果。给了 一个列名。
道理 其实是一样的。
@無限遐想: http://topic.csdn.net/u/20090515/12/ee9a595e-b0bd-4ee2-899d-d8024d0a481b.html
@無限遐想: 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.姓名
@無限遐想: 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 ‘JAVA’ then A1.成绩 END)as 'JAVA',
sum(case A1.课程 when ‘SQL’ then A1.成绩 END)as 'SQL'
from A A1
group by A1.姓名
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
行转列的问题,sql2005中有个函数:PIVOT,具体用法可查demo