表如下: 单位 级别 姓名
单位A 处级 张三
单位B 处级 李四
单位A 科级 王五
单位B 科级 小六现在要统计各单位各级别分别多少人,以及各单位,或者各级别总共多少人,需要统计如下:
处级 科级 总计
单位A 1人 1人 2人
单位B 1人 1人 2人
总计 2人 2人 4人
能用一个SQL语句实现吗?
有什么好的解决办法?
单位A 处级 张三
单位B 处级 李四
单位A 科级 王五
单位B 科级 小六现在要统计各单位各级别分别多少人,以及各单位,或者各级别总共多少人,需要统计如下:
处级 科级 总计
单位A 1人 1人 2人
单位B 1人 1人 2人
总计 2人 2人 4人
能用一个SQL语句实现吗?
有什么好的解决办法?
解决方案 »
- 请教如何将excel数据导入到sql server已有的表中
- 一个简单的查询
- 用asp语句,怎样从access中复制一个表含数据到sqlserver中
- 数据库之间数据拷贝的问题
- 请教一个SQL语句的写法,有点难度!!
- 为什么用EXEC ()写法,就不能读出今天所有的帖子呢??
- 附加数据库出错。
- 虚拟主机 sql2000 使用的问题
- 送分100分:请问RSTXM.open 。。adLockReadOnly 中的adLockReadOnly
- 如何在程序中用代码实现sql数据库的数据备份,恢复?
- 这句SQL如何写?。。。。如何将流文件及文字内容同时写进两字段里去?
- 这个通过 ID返回SQL用户IP的存储过程是不是有错误啊~!
处级= sum(case when 级别 = '处级' then 1 else 0 end),
科级= sum(case when 级别 = '科级' then 1 else 0 end),
总计= sum(1)
from table
group by 单位
insert @t select
'单位A','处级','张三' union select
'单位B','处级','李四' union select
'单位A','科级','王五' union select
'单位B','科级','小六'select isnull(单位,'总计') 单位,
处级= sum(case when 级别 = '处级' then 1 else 0 end),
科级= sum(case when 级别 = '科级' then 1 else 0 end),
总计= sum(1)
from @t
group by 单位 with rollup/*
单位 处级 科级 总计
---------- ----------- ----------- -----------
单位A 1 1 2
单位B 1 1 2
总计 2 2 4(所影响的行数为 3 行)
*/
insert @t select
'单位A','处级','张三' union select
'单位B','处级','李四' union select
'单位A','科级','王五' union select
'单位B','科级','小六'select isnull(单位,'总计') 单位,
处级= cast(sum(case when 级别 = '处级' then 1 else 0 end) as varchar)+ '人',
科级= cast(sum(case when 级别 = '科级' then 1 else 0 end) as varchar)+ '人',
总计= cast(sum(1) as varchar)+ '人'
from @t
group by 单位 with rollup/*
单位 处级 科级 总计
---------- -------------------------------- -------------------------------- --------------------------------
单位A 1人 1人 2人
单位B 1人 1人 2人
总计 2人 2人 4人(所影响的行数为 3 行)
*/
declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'sum(case when 级别='''+级别+''' then 1 else 0 end) as ['+级别+']'
from (select distinct 级别 from tb)t
exec('select isnull(单位,''总计'') as 单位,'+@sql+',总计=sum(1)
from tb group by 单位 with rollup 或 cube)
insert ta select
'单位A','处级','张三' union select
'单位B','处级','李四' union select
'单位A','科级','王五' union select
'单位B','科级','小六'declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'['+级别+']=cast(sum(case when 级别='''+级别+''' then 1 else 0 end) as varchar)+ ''人'''
from (select distinct 级别 from ta)t
exec('select isnull(单位,''总计'') as 单位,'+@sql+',总计=cast(sum(1) as varchar)+''人''
from ta group by 单位 with rollup')/*
单位 处级 科级 总计
---------- -------------------------------- -------------------------------- --------------------------------
单位A 1人 1人 2人
单位B 1人 1人 2人
总计 2人 2人 4人(所影响的行数为 3 行)
*/drop table ta
drop table tb
go
create table tb(单位 varchar(10),级别 varchar(10),姓名 varchar(10))
insert tb
select '单位A','处级','张三' union
select '单位B','处级','李四' union
select '单位A','科级','王五' union
select '单位B','科级','小六'
--select * from tb
declare @sql varchar(2000)
set @sql='select isnull(单位,''总计'') as 单位 ,'
select @sql=@sql+'(cast((sum(case when 级别='''+a.级别+''' then 1 else 0 end) ) as varchar(10))'+'+'+'''人'''+' ) as '+a.级别+','
from
(select distinct 级别 from tb) a
set @sql=@sql+'(cast(('
select @sql=@sql+'sum(case when 级别='''+a.级别+''' then 1 else 0 end)+'
from
(select distinct 级别 from tb) a
set @sql=substring(@sql,1,len(@sql)-1)+') as varchar(100))+''人'') as 总计 from tb group by 单位 with rollup'
exec (@sql)
接分了啊