sql查询排列问题
比如表的信息是
科目表
lessionid(课程号) lessionname(课程名)
l001 C语言
l002 C++
l003 VB.NET
....
人员信息表
stuid(学号) stuname(姓名) ....
001 刘大
002 关二
003 张三
...
分数信息表
stuid(学号) lessionid(课程号) score(分数)
001 l001 99
002 l002 88
003 l003 77
...
学号 姓名 C语言 C++ VB.NET ...
001 刘大 99 99 99
002 关二 88 88 88
003 张三 77 77 77
我不要那种固定格式输出,因为课程名可能有变动的.那种固定一旦变动了课程信息就还得改动程序,很不方便.
[解决办法]
if object_id( 'pubs..科目表 ') is not null
drop table 科目表
go
create table 科目表(lessionid varchar(10),lessionname varchar(10))
insert into 科目表(lessionid,lessionname) values( 'l001 ', 'C语言 ')
insert into 科目表(lessionid,lessionname) values( 'l002 ', 'C++ ')
insert into 科目表(lessionid,lessionname) values( 'l003 ', 'VB.NET ')
go
if object_id( 'pubs..人员信息表 ') is not null
drop table 人员信息表
go
create table 人员信息表(stuid varchar(10),stuname varchar(10))
insert into 人员信息表(stuid,stuname) values( '001 ', '刘大 ')
insert into 人员信息表(stuid,stuname) values( '002 ', '关二 ')
insert into 人员信息表(stuid,stuname) values( '003 ', '张三 ')
go
if object_id( 'pubs..分数信息表 ') is not null
drop table 分数信息表
go
create table 分数信息表(stuid varchar(10),lessionid varchar(10),score int)
insert into 分数信息表(stuid,lessionid,score) values( '001 ', 'l001 ',99)
insert into 分数信息表(stuid,lessionid,score) values( '002 ', 'l002 ',88)
insert into 分数信息表(stuid,lessionid,score) values( '003 ', 'l003 ',77)
go
declare @sql varchar(8000)
set @sql = 'select stuid,stuname '
select @sql = @sql + ' , max(case lessionname when ' ' ' + lessionname + ' ' ' then score else null end) [ ' + lessionname + '] '
from (select distinct lessionname from (select a.stuid , b.stuname , c.lessionname , a.score from 科目表 c, 人员信息表 b, 分数信息表 a where a.stuid = b.stuid and a.lessionid = c.lessionid) t ) as a
set @sql = @sql + ' from (select a.stuid , b.stuname , c.lessionname , a.score from 科目表 c, 人员信息表 b, 分数信息表 a where a.stuid = b.stuid and a.lessionid = c.lessionid) t group by stuid,stuname '
exec(@sql)
drop table 科目表, 人员信息表 , 分数信息表
/*
stuid stuname C++ C语言 VB.NET
---------- ---------- ----------- ----------- -----------
002 关二 88 NULL NULL
001 刘大 NULL 99 NULL
003 张三 NULL NULL 77
*/