日期:2014-05-18 浏览次数:20456 次
--建立测试环境 Create Table 表(year varchar(10),name varchar(10),value varchar(10)) --插入数据 insert into 表 select '2002','a','1' union select '2002','b','4' union select '2002','c','5' union select '2003','a','7' union select '2003','b','5' union select '2003','c','4' union select '2004','a','4' select * from 表 --测试语句 DECLARE @SQL VARCHAR(8000) SET @SQL='SELECT name' SELECT @SQL= @SQL+ ',sum(CASE WHEN year = ''' + year + ''' THEN value else 0 END) [' + year + ']' FROM (SELECT DISTINCT year FROM 表) A SET @SQL=@SQL+' FROM 表 GROUP BY name' exec (@SQL) --删除测试环境 Drop Table 表 /* name 2002 2003 2004 a 1 7 4 b 4 5 0 c 5 4 0 */
------解决方案--------------------
--> 测试数据: #T if object_id('tempdb.dbo.#T') is not null drop table #T create table #T (员工姓名 varchar(4),部门 varchar(6)) insert into #T select '张三','部门一' union all select '李四','部门二' union all select '王三','部门一' union all select '张四','部门三' union all select '罗三','部门二' union all select '周四','部门三' union all select '秦三','部门一' union all select '周三','部门二' union all select '高四','部门一' go declare @sql varchar(8000) set @sql='select 员工姓名' select @sql=@sql+',case when 部门='''+部门+''' then ''是'' else '''' end ['+部门+']' from #T group by 部门 exec (@sql+' from #T') go drop table #T /* 员工姓名 部门二 部门三 部门一 ---- ---- ---- ---- 张三 是 李四 是 王三 是 张四 是 罗三 是 周四 是 秦三 是 周三 是 高四 是 */