是在查询分析器中吗?还有,如下的测试数据,是自己手工敲出来的吗?例如下面这段,我看高手们回答的格式都是如此,想学习一下----------------------------------------------------------------
-- Author  :fredrickhu(我是小F,向高手学习)
-- Date    :2009-11-18 14:40:35
-- Version:
--      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
--    Nov 24 2008 13:01:59 
--    Copyright (c) 1988-2005 Microsoft Corporation
--    Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([项目编码] varchar(5),[项目名称] varchar(6))
insert [a]
select 'X0001','差旅费' union all
select 'X0002','招待费' union all
select 'X0003','办公费'
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([日期] datetime,[项目编码] varchar(5),[金额] int)
insert [b]
select '2009-11-1','X0001',300 union all
select '2009-11-1','X0001',500 union all
select '2009-11-1','X0002',150 union all
select '2009-11-2','X0003',210 union all
select '2009-11-5','X0001',500 union all
select '2009-11-8','X0002',2000
--------------开始查询--------------------------
declare @sql varchar(8000)
set @sql = 'select b.日期 '
select @sql = @sql + ' , sum(case a.项目名称 when ''' + a.项目名称 + ''' then b.金额 else 0 end) [' + a.项目名称 + ']'
from (select distinct a.项目名称 from a) as a
set @sql = @sql + ' from a,b where a.项目编码=b.项目编码 group by b.日期'
exec(@sql) 
----------------结果----------------------------
/*日期                      办公费         差旅费         招待费
----------------------- ----------- ----------- -----------
2009-11-01 00:00:00.000 0           800         150
2009-11-02 00:00:00.000 210         0           0
2009-11-05 00:00:00.000 0           500         0
2009-11-08 00:00:00.000 0           0           2000(4 行受影响) 
*/