超难sql问题  50 分超值
表: 
 帐号         时间                                             项目               分数 
 01               2007-4-4:10:10:11         01                     5 
 01               2007-4-4:10:11:11         02                     14 
 01               2007-4-4:10:13:11         01                     7 
 02               2007-4-4:10:14:11         01                     6   
 得到一个视图: 
 机构如下: 
 帐号         日期                  项目1               项目2........ 
 01               2007-4-4         7                           14 
 02               2007-4-4         6                                
 核心提示   取得所有帐号一天内各项的最新数据   并竖表横排成一个视图
------解决方案--------------------drop table tbtest 
 go 
 create table tbtest(帐号 varchar(10),时间 datetime,项目 varchar(10),分数 int) 
 insert into tbtest 
 select            '01 ', '2007-4-4 10:10:11 ', '01 ',5 
 union all select  '01 ', '2007-4-4 10:11:11 ', '02 ',14 
 union all select  '01 ', '2007-4-4 10:13:11 ', '01 ',7 
 union all select  '02 ', '2007-4-4 10:14:11 ', '01 ',6 
 go 
 create proc up_test 
 as 
 declare @sql varchar(8000) 
 set @sql= ' ' 
 select @sql=@sql+ ',max(case when 项目= ' ' '+项目+ ' ' ' then 分数 else 0 end) as  ' '项目 '+rtrim(cast(项目 as int))+ ' ' ' ' 
 from(select distinct 项目 from tbtest)t 
 exec( 'select 帐号,convert(char(10),时间,120) as  ' '时间 ' ' '+@sql+ ' from (select * from tbtest 
 	where 时间=(select max(时间) from tbtest a where a.帐号=tbtest.帐号 and a.项目=tbtest.项目))t group by 帐号,convert(char(10),时间,120) ') 
 go 
 /* 
 帐号         时间         项目1         项目2          
 ---------- ---------- ----------- -----------  
 01         2007-04-04 7           14 
 02         2007-04-04 6           0 
 */
------解决方案--------------------CREATE TABLE TB 
 ( 
 帐号 VARCHAR(2), 
 时间 DATETIME, 
 项目 VARCHAR(2), 
 分数 INT 
 ) 
 INSERT INTO TB  
 SELECT  '01 ',  '2007-4-4 10:10:11 ', '01 ',5 UNION ALL                       
 SELECT  '01 ',  '2007-4-4 10:11:11 ', '02 ',14 UNION ALL 
 SELECT  '01 ',  '2007-4-4 10:13:11 ', '01 ',7 UNION ALL 
 SELECT  '02 ',  '2007-4-4 10:14:11 ', '01 ',6 
 GO 
 DECLARE @S VARCHAR(500) 
 SET @S= 'SELECT 帐号,MIN(CONVERT(CHAR(10),时间,120)) 时间, ' 
 SELECT @S=@S+  'MAX(CASE 项目 WHEN  ' ' '+项目+ ' ' ' THEN 分数 ELSE 0 END) AS  ' ' '+项目+ ' ' ', ' FROM (SELECT DISTINCT 项目 FROM TB ) A  
 SET @S=STUFF(@S,LEN(@S),1, ' ')+ ' FROM TB GROUP BY 帐号 ' 
 exec( @S) 
 --结果 
 帐号   时间         01          02 
 ---- ---------- ----------- ----------- 
 01   2007-04-04 7           14 
 02   2007-04-04 6           0   
 (2 行受影响)