--> 测试数据: #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
select 员工姓名,
case when 部门='部门一' then '是' else '' end [部门一],
case when 部门='部门二' then '是' else '' end [部门二],
case when 部门='部门三' then '是' else '' end [部门三]
from #T
go
drop table #T/*
员工姓名 部门一 部门二 部门三
---- ---- ---- ----
张三 是
李四 是
王三 是
张四 是
罗三 是
周四 是
秦三 是
周三 是
高四 是 (所影响的行数为 9 行)
*/
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
select 员工姓名,
case when 部门='部门一' then '是' else '' end [部门一],
case when 部门='部门二' then '是' else '' end [部门二],
case when 部门='部门三' then '是' else '' end [部门三]
from #T
go
drop table #T/*
员工姓名 部门一 部门二 部门三
---- ---- ---- ----
张三 是
李四 是
王三 是
张四 是
罗三 是
周四 是
秦三 是
周三 是
高四 是 (所影响的行数为 9 行)
*/
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*/
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (员工姓名 varchar(11),部门 varchar(11))
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 '高四','部门一'select
员工姓名,
部门一=case 部门 when '部门一' then '是' else '否' end,
部门二=case 部门 when '部门二' then '是' else '否' end,
部门三=case 部门 when '部门三' then '是' else '否' end
from #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/*员工姓名 部门二 部门三 部门一
---- ---- ---- ----
张三 是
李四 是
王三 是
张四 是
罗三 是
周四 是
秦三 是
周三 是
高四 是*/