解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :DBA_HuangZJ(发粪涂墙)
    -- Date    :2014-03-11 15:37:54
    -- Version:
    --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
    -- Apr  2 2010 15:48:46 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
    --
    ----------------------------------------------------------------
    --> 测试数据[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([姓名] nvarchar(4),[科目] nvarchar(4),[分数] int,[预期分数] int)
    insert [huang]
    select N'张三',N'语文',74,90 union all
    select N'张三',N'数学',83,60 union all
    select N'张三',N'物理',93,78 union all
    select N'李四',N'语文',74,100 union all
    select N'李四',N'数学',84,85 union all
    select N'李四',N'物理',94,60
    --------------生成数据--------------------------declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+','+quotename([科目])+N'=max(case when [科目]=N'+quotename([科目],'''')+N' then [分数] else 0 end)'
    +','+quotename([科目]+N'预期分数')+N'=max(case when [科目]=N'+quotename([科目],'''')+N' then [预期分数] else 0 end)'
    from [huang] group by [科目]
    exec('select [姓名]'+@s+' from [huang] group by [姓名]')
    ----------------结果----------------------------
    /* 
    姓名   数学          数学预期分数      物理          物理预期分数      语文          语文预期分数
    ---- ----------- ----------- ----------- ----------- ----------- -----------
    张三   83          60          93          78          74          90
    李四   84          85          94          60          74          100*/
      

  2.   

    select 姓名,
    sum(case 科目 when '语文' then 分数 end) as [语文],
    sum(case 科目 when '语文' then 预期分数 end) as [语文预期分数],
    sum(case 科目 when '数学' then 分数 end) as [数学],
    sum(case 科目 when '数学' then 预期分数 end) as [数学预期分数],
    sum(case 科目 when '物理' then 分数 end) as [物理],
    sum(case 科目 when '物理' then 预期分数 end) as [物理预期分数]
    from 表  group by 姓名