表a
公司名    年       投资
中国石油  2007    100000
中国石油  2008     30000
中国石化  2007    50000最后想得到结果 公司名          2007    2008
中国石油         100000  3000
中国石化         50000求1条简单的SQL语句

解决方案 »

  1.   

    select 公司名,[2007]=max(case 年 when 2007 then 投资 end),[2008]=max(case 年 when 2008 then 投资 end) from 表a group by 公司名
      

  2.   


    --动态
    declare @sql varchar(8000)
    set @sql='select 公司名'
    select @sql=@sql+',['+年+']=sum(case 年 when '''+年+''' then 投资 else 0 end)'
    from (select distinct 年 from 表名)a order by 年
    set @sql=@sql+' from 表名 group by 公司名'
    exec(@sql)
      

  3.   


    --静态:
    select 公司名,
    [2007]=sum(case 年 when 2007 then 投资 end),
    [2008]=sum(case 年 when 2008 then 投资 end) 
    from 表名 
    group by 公司名
      

  4.   

    create table a
    (
    name nvarchar(10),
    year int,
    num int
    )
    insert into a
    select
    N'中国石油',  2007,    100000 UNION
    select
    N'中国石油',  2008,     30000 UNION
    select
    N'中国石化',  2007,    50000
    select name,
           sum(case year when 2007 then num else 0 end) as '2007',
           sum(case year when 2008 then num else 0 end) as '2008' 
    from a
    group by name
    order by name desc
    name       2007        2008
    ---------- ----------- -----------
    中国石油       100000      30000
    中国石化       50000       0(2 row(s) affected)
      

  5.   

    if object_id('a') is not null
       drop table a
    go
    create table a 

    name nvarchar(10), 
    year int, 
    num int 

    insert into a 
    select '中国石油',  2007,    100000 UNION 
    select '中国石油',  2008,    30000 UNION 
    select '中国石化',  2007,    50000 
    select * from a---这中查询应该用动态语句来实现,静态的明年就会错误
    declare @sql varchar(8000)
    set @sql='select name,'
    select @sql=@sql+'isnull(cast((max(case when year='+cast(aa.year as varchar(4))+' then num  end)) as varchar(1000)),'''') as ['+cast(aa.year as varchar(4))+'],'
    from
    (
    select distinct year from a
    ) aa
    print @sql
    set @sql=substring(@sql,1,len(@sql)-1)+' from a group by name'
    exec(@sql)这中查询应该用动态语句来实现,静态的明年就会错误,完全正确