日期:2014-05-18 浏览次数:20436 次
create table table1(月份 varchar(10),部门 varchar(10),业绩 int) insert into table1 values('一月份', '01', 10) insert into table1 values('一月份', '02', 10) insert into table1 values('一月份', '03', 5) insert into table1 values('二月份', '02', 8) insert into table1 values('二月份', '04', 9) insert into table1 values('三月份', '03', 8) go --如果你的月份仅仅是这三个月,则如下: select 部门, sum(case 月份 when '一月份' then 业绩 else 0 end) [一月份], sum(case 月份 when '二月份' then 业绩 else 0 end) [二月份], sum(case 月份 when '三月份' then 业绩 else 0 end) [三月份] from table1 group by 部门 /* 部门 一月份 二月份 三月份 ---------- ----------- ----------- ----------- 01 10 0 0 02 10 8 0 03 5 0 8 04 0 9 0 (所影响的行数为 4 行) */ --如果你的月份不止这三个月,则如下: declare @sql varchar(8000) set @sql = 'select 部门 ' select @sql = @sql + ' , sum(case 月份 when ''' + 月份 + ''' then 业绩 else 0 end) [' + 月份 + ']' from (select distinct 月份 from table1) as a set @sql = @sql + ' from table1 group by 部门' exec(@sql) /* 部门 一月份 二月份 三月份 ---------- ----------- ----------- ----------- 01 10 0 0 02 10 8 0 03 5 0 8 04 0 9 0 (所影响的行数为 4 行) */ drop table table1
------解决方案--------------------
/*
题目:有如下表
table1
月份 部门 业绩
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
为了得出下面的表,该怎样写查询语句?
部门 一月份 二月份 三月份
---------- ------ ------ ------
01 10 NULL NULL
02 10 8 NULL
03 5 NULL 8
04 NULL 9 NULL
*/
go
if OBJECT_ID('tbl')is not null
drop table tbl
go
create table tbl(
月份 varchar(6),
部门 varchar(2),
业绩 int
)
go
insert tbl
select '一月份','01',10 union all
select '一月份','02',10 union all
select '一月份','03',5 union all
select '二月份','02',8 union all
select '二月份','04',9 union all
select '三月份','03',8
declare @str varchar(2000)
set @str=''
select @str=@str+','+'sum(case when 月份='+quotename(月份,'''')+
' then 业绩 else 0 end) as '+月份 from tbl group by 月份
print @str
set @str='select 部门'+@str+' from tbl group by 部门'
exec(@str)
/*
部门 二月份 三月份 一月份
01 0 0 10
02 8 0 10
03 0 8 5
04 9 0 0
*/