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

怎么样动态创建这样的表?(一个面试题不会做)
有这样的一个题目:有一个Name表是下面这样的:
Name                             Year                       Money
  lan                               1993                       1
jim                                 1993                       2
lan                                 1994                       3
jim                                 1994                       2

最后要显示成这样的表
Name                       1993                                     1994
lan                             1                                         3
jim                             2                                         2
第一行是字段名,要求用一句SQL语句写出来,30分,我知道需要动态创建表,但是不会写这条语句,现在贴出来,大家分析分析,看如何写。

------解决方案--------------------
如果就是这些数据...

select name , sum (case when year =1993 then money else 0 end ) as [1993]
, sum (case when year =1994 then money else 0 end ) as [1994]
from name
group by name
------解决方案--------------------
create table test (name char(10),year char(10),[Money] int)
go
insert test values( 'lan ', '1993 ',1)
insert test values( 'jim ', '1993 ',2)
insert test values( 'lan ', '1994 ',3)
insert test values( 'jim ', '1994 ',2)

declare @sql varchar(8000)
set @sql = 'select name '
select @sql = @sql + ',sum(case year when ' ' '+rtrim(year)+ ' ' ' then [Money] end) [ '+rtrim(year)+ '] '
from (select distinct year from test) as a
select @sql = @sql+ ' from test group by name '
exec(@sql)

drop table test

--结果
/*
name 1993 1994
-----------------------------
jim 2 2
lan 1 3
*/
------解决方案--------------------
动态吗?

create table #(A varchar(20),B varchar(20),C varchar(20))
insert into #
select 'x ', '01 ', 'aaa ' union
select 'x ', '02 ', 'bbb ' union
select 'x ', '03 ', 'ccc ' union
select 'y ', '01 ', 'ddd ' union
select 'y ', '03 ', 'eee ' union
select 'z ', '04 ', 'fff '
go

--处理语句
declare
@sql varchar(8000),
@sq varchar(80