日期:2014-05-19  浏览次数:20830 次

请问如何将exec(@sql)的执行的结果写入表中(临时表也可以)
纵转换为横。
有表:test(name   char(10),km   char(10),cj   int)
name     km     cj
----------------------------------------------
张三     语文     80
张三     数学     86
张三     英语     75
李四     语文     78
李四     数学     85
李四     英语     78

要求以横向格式显示,即:
想变成

姓名       语文       数学       英语
----------------------------
张三       80           86           75
李四       78           85           78

Create   table   test   (name   char(10),km   char(10),cj   int)
go
insert   test   values( '张三 ', '语文 ',80)
insert   test   values( '张三 ', '数学 ',86)
insert   test   values( '张三 ', '英语 ',75)
insert   test   values( '李四 ', '语文 ',78)
insert   test   values( '李四 ', '数学 ',85)
insert   test   values( '李四 ', '英语 ',78)
方法:
declare   @sql   varchar(8000)
set   @sql   =   'select   name '
select   @sql   =   @sql   +   ',sum(case   km   when   ' ' '+km+ ' ' '   then   cj   end)   [ '+km+ '] '
  from   (select   distinct   km   from   test)   as   a
select   @sql   =   @sql+ '   from   test   group   by   name '
exec(@sql)

请问如何将exec(@sql)的执行的结果写入表中(临时表也可以)



------解决方案--------------------
--try

declare @sql varchar(8000)
set @sql = 'select name '
select @sql = @sql + ',sum(case km when ' ' '+km+ ' ' ' then cj end) [ '+km+ '] '
from (select distinct km from test) as a
select @sql = @sql+ ' into #T from test group by name '
exec(@sql)

select * from #T
------解决方案--------------------
insert into #临时表
exec(@sql)
========
少写了一句话
create table #临时表(……)