怎么样动态创建这样的表?(一个面试题不会做)
有这样的一个题目:有一个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