34,590
社区成员
发帖
与我相关
我的任务
分享
create table test([年份] varchar(30), [部门名] varchar(50), [动作] varchar(50))
go
insert test
select '2012', 'A', '出差' union all
select '2012', 'B','出差' union all
select '2012', 'B', '出国' union all
select '2012', 'B', '出国' union all
select '2011', 'A', '出差' union all
select '2011', 'A', '出国' union all
select '2011', 'B', '出差'
select * from test
declare @sql varchar(max)
declare @sql2 varchar(500)
select @sql=isnull(@sql+',','')+'(case when [部门名]='''+[部门名]+''' then [动作] end) as '+t.[部门名]
,@sql2=isnull(@sql2+',','')+'count(['+t.[部门名]+']) as '''+t.[部门名]+''''
from
( select distinct [部门名] from test ) t
set @sql='select [年份], '+@sql2+' FROM (select [年份],'+@sql+' from test) t group by t.[年份]'
exec(@sql)
drop table test
/*
(7 row(s) affected)
年份 部门名 动作
------------------------------ -------------------------------------------------- --------------------------------------------------
2012 A 出差
2012 B 出差
2012 B 出国
2012 B 出国
2011 A 出差
2011 A 出国
2011 B 出差
(7 row(s) affected)
年份 A B
------------------------------ ----------- -----------
2011 2 1
2012 1 3
(2 row(s) affected)
*/
DECLARE @sql NVARCHAR(4000)
SET @sql='select 年份'
SELECT @sql=@sql+','+部门名+'=sum(case when 部门名='''+部门名+''' then 1 else 0 end)' FROM 表 GROUP BY 部门名
EXEC(@sql+' from 表 group by 年份 order by 年份 desc')
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
DROP TABLE tba
END
GO
CREATE TABLE tba
(
年份 INT,
部门名 VARCHAR(10),
动作 VARCHAR(10)
)
GO
INSERT INTO tba
SELECT 2012, 'A', '出差' UNION ALL
SELECT 2012, 'B', '出差' UNION ALL
SELECT 2012, 'B', '出国' UNION ALL
SELECT 2012, 'B', '出国' UNION ALL
SELECT 2011, 'A', '出差' UNION ALL
SELECT 2011, 'A', '出国' UNION ALL
SELECT 2011, 'B', '出差'
GO
DECLARE @sql VARCHAR(4000)
SET @sql='SELECT 年份'
SELECT @sql=@sql + ',SUM(CASE WHEN 部门名 = ''' + 部门名 + ''' THEN 1 ELSE 0 END) AS ' + 部门名 FROM tba GROUP BY 部门名
EXEC(@sql+' FROM tba GROUP BY 年份 ORDER BY 年份 DESC')
年份 A B
2012 1 3
2011 2 1
DECLARE @sql NVARCHAR(4000)
SET @sql='select 年份'
SELECT @sql=@sql+','+部门名 FROM 表 GROUP BY 部门名
EXEC(@sql+' from 表 group by 年份 order by 年份 desc')
select
年份
,sum(case when 部门名='A' then 1 else 0 end) as A
,sum(case when 部门名='B' then 1 else 0 end) as B
from 表
group by 年份
select
年份,
sum(case when 部门名='A' then 1 else 0 end) as 'A',
sum(case when 部门名='B' then 1 else 0 end) as 'B'
from
tb
group by
年份