日期:2014-05-18 浏览次数:20562 次
--> 测试数据: [tb] if object_id('[tb]') is not null drop table [tb] create table [tb] (职务号 int,文书号 varchar(6),权限 varchar(5),公司 varchar(2)) insert into [tb] select 1,'010104','add','01' union all select 1,'010104','del','01' union all select 1,'010104','print','01' --开始查询 select 职务号,文书号, 增加=MAX(case 权限 when 'add' then 1 else 0 end), 删除=MAX(case 权限 when 'del' then 1 else 0 end), 打印=MAX(case 权限 when 'print' then 1 else 0 end), 公司 from tb group by 职务号,文书号,公司 --结束查询 drop table [tb] /* 职务号 文书号 增加 删除 打印 公司 ----------- ------ ----------- ----------- ----------- ---- 1 010104 1 1 1 01 (1 行受影响)
------解决方案--------------------
select 职务号,文书号, max(case when 权限='add' then 1 else 0 end) as 增加, max(case when 权限='del' then 1 else 0 end) as 删除, max(case when 权限='print' then 1 else 0 end) as 打印, 公司 from a group by 职务号,文书号,公司
------解决方案--------------------
select 职务号,文书号, max(case when 权限='add' then 1 else 0 end) as 增加, max(case when 权限='del' then 1 else 0 end) as 删除, max(case when 权限='print' then 1 else 0 end) as 打印,公司 from a group by 职务号,文书号,公司
------解决方案--------------------
-- 动态: declare @sql varchar(8000) set @sql = 'select 职务号,文书号,公司 ' select @sql = @sql + ' , sum(case 权限 when ''' + 权限 + ''' then 1 else 0 end) [' + 权限 + ']' from (select distinct 权限 from tb) as a set @sql = @sql + ' from tb group by 职务号,文书号,公司' exec(@sql)
------解决方案--------------------
create table #t1(id int,code varchar(50),rightname varchar(50),company varchar(50)) insert into #t1 select 1 as id,'010104' as code,'add' as rightname,'01' as company union all select 1,'010104','del','01' union all select 1,'010104','print','01' --================================================== select id ,code,company, max(case rightname when 'add' then '1' else '' end) as 新增 , max(case rightname when 'del' then '1' else '' end) as 删除 , max(case rightname when 'print' then '1' else '' end) as 打印 from #t1 group by id ,code,company drop table #t1 ----------------------- (3 行受影响) id code company 新增 删除 打印 ----------- -------------------------------------------------- -------------------------------------------------- ---- ---- ---- 1 010104 01 1 1 1 (1 行受影响)