第一题:
   就一张表
            Name    Subject   Score
             张三     数学      60
             张三      语文      80
             李四       语文      100
             李四       数学       70
怎么能得到:
            姓名     语文   数学
            张三     80      60
            李四     100      70
谢谢
第二题:一个数据库的访问量达到每天上百万,更改次数达到每天十万次,问怎么设计这个数据库....
谢谢

解决方案 »

  1.   

    /*
    第一题:
      就一张表
      Name Subject Score
      张三 数学 60
      张三 语文 80
      李四 语文 100
      李四 数学 70
    怎么能得到:
      姓名 语文 数学
      张三 80 60
      李四 100 70
    谢谢
    第二题:一个数据库的访问量达到每天上百万,更改次数达到每天十万次,问怎么设计这个数据库....*/
    go
    if OBJECT_ID('tbl')is not null
    drop table tbl
    go
    create table tbl(
    Name varchar(10),
    [Subject] varchar(10),
    Score int
    )
    go
    insert tbl
    select '张三','数学',60 union all
    select '张三','语文',80 union all
    select '李四','语文',100 union all
    select '李四','数学',70
    --问题一:
    declare @str varchar(1000)
    set @str=''
    select @str=@str+','+[Subject]+
    '=max(case when [Subject]='+QUOTENAME([Subject],'''')+' then Score else 0 end)'
    from tbl
    group by [Subject]
    print @str
    set @str='select Name as 姓名 '+@str+' from tbl group by Name'
    print @str
    exec(@str)
    /*
    姓名 数学 语文
    李四 70 100
    张三 60 80
    */
    --问题二不会