34,838
社区成员




只要这段:
select * , 专业所在安全度 =
case
when 绿区人数 = 0 then '红区'
when 红区人数*1.0 / 绿区人数 < 0.2 then '绿区'
when 红区人数*1.0 / 绿区人数 between 0.2 and 0.3 then '蓝区'
when 红区人数*1.0 / 绿区人数 between 0.3 and 0.5 then '黄区'
when 红区人数*1.0 / 绿区人数 >0.5 then '红区'
end
from
(
select isnull(专业,'合计') 专业 , 在册人数 = count(*) ,
绿区人数 = sum(case when 计分 < 10 then 1 else 0 end),
红区人数 = sum(case when 计分 >= 10 then 1 else 0 end)
from
(
select 专业 , 违章人 , 计分 = sum(计分) from tb group by 专业 , 违章人
) t
group by 专业 with rollup
) m
--这是我上次就已经写好的,你没仔细看.
create table tb(ID int, 违章人 varchar(10), 所在工区 varchar(10), 违章内容 int , 计分 int, 专业 varchar(10))
insert into tb values(1, '张三', '掘一', 123 , 10 , '掘进')
insert into tb values(2, '李四', '掘二', 321 , 11 , '掘进')
insert into tb values(3, '王五', '掘一', 222 , 9 , '掘进')
insert into tb values(4, '周六', '掘一', 133 , 19 , '掘进')
insert into tb values(5, '孙七', '采一', 1221, 9 , '采煤')
insert into tb values(6, '王五', '掘一', 123 , 2 , '掘进')
go
select * , 专业所在安全度 =
case
when 绿区人数 = 0 then '红区'
when 红区人数*1.0 / 绿区人数 < 0.2 then '绿区'
when 红区人数*1.0 / 绿区人数 between 0.2 and 0.3 then '蓝区'
when 红区人数*1.0 / 绿区人数 between 0.3 and 0.5 then '黄区'
when 红区人数*1.0 / 绿区人数 >0.5 then '红区'
end
from
(
select isnull(专业,'合计') 专业 , 在册人数 = count(*) ,
绿区人数 = sum(case when 计分 < 10 then 1 else 0 end),
红区人数 = sum(case when 计分 >= 10 then 1 else 0 end)
from
(
select 专业 , 违章人 , 计分 = sum(计分) from tb group by 专业 , 违章人
) t
group by 专业 with rollup
) m
drop table tb
/*
专业 在册人数 绿区人数 红区人数 专业所在安全度
---------- ----------- ----------- ----------- -------
采煤 1 1 0 绿区
掘进 4 0 4 红区
合计 5 1 4 红区
(所影响的行数为 3 行)
*/
set nocount on
create table AZYZL1(
ID int,安质员姓名 varchar(10),所在工区 varchar(4),区队长 varchar(10),班组长 varchar(10),
工作地点 varchar(16),违章人 varchar(10),专业 varchar(10))
insert AZYZL1 select 1,'吴佃秋','掘一','李明','张军','6196运输巷','张三','掘进'
insert AZYZL1 select 2,'吴佃秋','掘一','李明','张军','6196运输巷','李四','掘进'
insert AZYZL1 select 3,'吴佃秋','掘一','李明','张军','6196运输巷','王二','掘进'
insert AZYZL1 select 4,'吴佃秋','掘一','李明','张军','6196运输巷','武大','掘进'
insert AZYZL1 select 5,'吴佃秋','掘一','李明','张军','6196运输巷','吴五','掘进'
create table wzrbb(ID int, 违章人 varchar(10), 所在工区 varchar(10), 违章内容 int ,计分 int, 专业 varchar(10))
insert into wzrbb values(1, '吴五', '掘一', 123 , 10 , '掘进')
insert into wzrbb values(2, '王二', '掘二', 321 , 11 , '掘进')
insert into wzrbb values(3, '吴五', '掘一', 222 , 9 , '掘进')
insert into wzrbb values(4, '张三', '掘一', 133 , 19 , '采煤')
go
select isnull(专业,'合计') 专业,在册人数 =max(在册人数)
from (
select a.专业,在册人数 =( select count(1) as count from AZYZL1 where 专业 = a.专业 )
from wzrbb a
left join AZYZL1 b on a.专业 = b.专业 and a.违章人 = b.违章人
group by a.专业,b.专业) aa
group by aa.专业 with rollup
/*
专业 在册人数
---------- -----------
采煤 0
掘进 5
合计 5
*/
drop table wzrbb,AZYZL1
create table wzrbb(ID int, 违章人 varchar(10), 所在工区 varchar(10), 违章内容 int ,计分 int, 专业 varchar(10))
insert into wzrbb values(1, '张三', '掘一', 123 , 10 , '掘进')
insert into wzrbb values(2, '李四', '掘二', 321 , 11 , '掘进')
insert into wzrbb values(3, '王五', '掘一', 222 , 9 , '掘进')
insert into wzrbb values(4, '周六', '掘一', 133 , 19 , '掘进')
insert into wzrbb values(5, '孙七', '采一', 1221, 9 , '采煤')
insert into wzrbb values(6, '王五', '掘一', 123 , 2 , '掘进')
go
select * ,
专业所在安全度 =
case
when 绿区人数 = 0 then '红区'
when 红区人数*1.0 / 绿区人数 < 0.2 then '绿区'
when 红区人数*1.0 / 绿区人数 between 0.2 and 0.3 then '蓝区'
when 红区人数*1.0 / 绿区人数 between 0.3 and 0.5 then '黄区'
when 红区人数*1.0 / 绿区人数 >0.5 then '红区'
end
from (
select isnull(t.专业,'合计') 专业 , 在册人数 = count(1),
绿区人数 = sum(case when 计分 < 10 then 1 else 0 end),
红区人数 = sum(case when 计分 >= 10 then 1 else 0 end)
from
(
select 专业 , 违章人 ,计分 = sum(计分) from wzrbb group by 专业 , 违章人
) t
group by t.专业 with rollup
) ss
/*
专业 在册人数 绿区人数 红区人数 专业所在安全度
---------- ----------- ----------- ----------- -------
采煤 1 1 0 绿区
掘进 4 0 4 红区
合计 5 1 4 红区
(所影响的行数为 3 行)
*/
drop table wzrbb