表a
公司名 年 投资
中国石油 2007 100000
中国石油 2008 30000
中国石化 2007 50000最后想得到结果 公司名 2007 2008
中国石油 100000 3000
中国石化 50000求1条简单的SQL语句
公司名 年 投资
中国石油 2007 100000
中国石油 2008 30000
中国石化 2007 50000最后想得到结果 公司名 2007 2008
中国石油 100000 3000
中国石化 50000求1条简单的SQL语句
--动态
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)
--静态:
select 公司名,
[2007]=sum(case 年 when 2007 then 投资 end),
[2008]=sum(case 年 when 2008 then 投资 end)
from 表名
group by 公司名
(
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)
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)这中查询应该用动态语句来实现,静态的明年就会错误,完全正确