34,575
社区成员
发帖
与我相关
我的任务
分享
create table ta(单位 varchar(10),级别 varchar(10),姓名 varchar(10))
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
试:
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)
declare @t table(单位 varchar(10),级别 varchar(10),姓名 varchar(10))
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 @t table(单位 varchar(10),级别 varchar(10),姓名 varchar(10))
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 行)
*/
select 单位,
处级= sum(case when 级别 = '处级' then 1 else 0 end),
科级= sum(case when 级别 = '科级' then 1 else 0 end),
总计= sum(1)
from table
group by 单位