表中
年份 部门名 动作
2012 A 出差
2012 B 出差
2012 B 出国
2012 B 出国
2011 A 出差
2011 A 出国
2011 B 出差如何得到以下结果:(求SQL语句)
年份 A B
2012 1 3
2011 2 1
年份 部门名 动作
2012 A 出差
2012 B 出差
2012 B 出国
2012 B 出国
2011 A 出差
2011 A 出国
2011 B 出差如何得到以下结果:(求SQL语句)
年份 A B
2012 1 3
2011 2 1
解决方案 »
- 有没有简单的sql语句查差别最小的记录
- SQL求百分比
- 出入库汇总查询?
- SQLSERVER2000数据表为什么不能同时订阅和设置触发器?
- sql2005联接sql2000数据库的问题
- 一张表的复杂查询。请教!
- 我想用Sql语句从存储过程中取得数据
- 数据库的表 复制到 另外一个数据库的表
- 多步OLE DB 操作产生错误。请检查每个OLE DB的状态值。没有工作完成 实时错误‘-2147217887’
- 怎样用SQL Server里面的Sql语句锁死数据库,直到执行完毕,禁止其他用户访问
- 如何用SQL去切“萝卜”
- 请问错误"参数数据类型 sql_variant 对于 like 函数的参数 1 无效。"是什么意思
年份,
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
年份
年份
,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 年份
DECLARE @sql NVARCHAR(4000)
SET @sql='select 年份'
SELECT @sql=@sql+','+部门名 FROM 表 GROUP BY 部门名
EXEC(@sql+' from 表 group by 年份 order by 年份 desc')
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', '出差'
GODECLARE @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固定用1楼就可以
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')其它方法参照
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?seed=562318242
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 testdeclare @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)
*/