none
期盼高手相助,如何查询? RRS feed

  • 问题

  • 假如学校跑协做了一个的会员的资料数据库,里面有两个表:会员资料表和成绩记录表(记录会员日常训练中的测试成绩)

    Sportsman:SID,name,age

                        1 ,顾之明,14

                        2,王英红,15

                        3,何伟,13

                           ...              

    record:SID,Date,Item,Record

                  1,2012-1-12,100m,10

                  1,2012-3-14,200m, 18

                  1,2012-2-22,100m,9

                  2,2012-3-1,100m,10

                  3,2012-2-1,200m,19

                  1,2012-4-15,300m,29

                  3,2012-3-13,1000m,185

                          ...

    现在要查询生成一个这样的表,列出会员各个项目最近一次的成绩,形如:

                  Name ,[100m],[200m],[300m],...,[1000m]

                  顾之明       9           19       null     ...    null

                  ...

    这个如何查询?SQL2012


    • 已编辑 Jerrey 2013年4月1日 11:12
    2013年4月1日 8:46

答案

  • create table Sportsman (SID int,name varchar(6),age int)
    insert into Sportsman
    select 1,'顾之明',14 union all
    select 2,'王英红',15 union all
    select 3,'何伟',13
    go
    
    create table record (SID int,Date datetime,Item varchar(5),Record int)
    insert into record
    select 1,'2012-1-12','100m',10 union all
    select 1,'2012-3-14','200m',18 union all
    select 1,'2012-2-22','100m',9 union all
    select 2,'2012-3-1','100m',10 union all
    select 3,'2012-2-1','200m',19 union all
    select 1,'2012-4-15','300m',29 union all
    select 3,'2012-3-13','1000m',185
    
    go
    
    declare @sql varchar(max)
    select @sql = isnull(@sql + '],[' , '') + Item from 
    (
    	select * from record t 
    	where Date=(select max(Date) from record where SID=t.SID and Item=t.Item)
    )m group by Item
    
    set @sql = '[' + @sql + ']'
    exec ('select a.name,b.* from 
    (select * from 
    (select SID,item,Record from record t 
    where Date=(select max(Date) from record where SID=t.SID and Item=t.Item)
    ) c ) a pivot (max(Record) for Item in (' + @sql + ')) b 
    left join Sportsman a on b.SID=a.SID')
    /*
    name   SID         1000m       100m        200m        300m
    ------ ----------- ----------- ----------- ----------- -----------
    顾之明    1           NULL        9           18          29
    王英红    2           NULL        10          NULL        NULL
    何伟     3           185         NULL        19          NULL
    */

    2013年4月1日 14:32
    版主