sql 先统计再求和运算
统计我做出来了,现在要把统计出来的迟到、早退、旷工、加班、全勤做以下运算:100-5*(迟到+早退)-10(旷工)+5(加班)。求sql咋写?sql:selectsum(...
统计我做出来了,现在要把统计出来的迟到、早退、旷工、加班、全勤做以下运算:100-5*(迟到+早退)-10(旷工)+5(加班)。求sql咋写?
sql:
select sum(100-5*(select count(atd) from Record where atd='迟到'and E_Name='211'))
from Record
报错消息:
消息 130,级别 15,状态 1,第 1 行
不能对包含聚合或子查询的表达式执行聚合函数。 展开
sql:
select sum(100-5*(select count(atd) from Record where atd='迟到'and E_Name='211'))
from Record
报错消息:
消息 130,级别 15,状态 1,第 1 行
不能对包含聚合或子查询的表达式执行聚合函数。 展开
2个回答
展开全部
select 100-5*(迟到+早退)-10*旷工+5*加班 from table1
追问
这么写的话我早就写上了,提示这个错误:
消息 130,级别 15,状态 1,第 1 行
不能对包含聚合或子查询的表达式执行聚合函数。
追答
1. 下面这个SQL是先统计出211的迟到早退旷工等的次数:
select E_Name,count(case when atd='迟到' then 1 end) as '迟到',count(case when atd='早退' then 1 end) as '早退',count(case when atd='旷工' then 1 end) as '旷工',count(case when atd='加班' then 1 end) as '加班' from Record group by E_Name having E_Name='211'
2. 然后在上面的统计的基础上算100-5*(迟到+早退)-10(旷工)+5(加班):
select 100-5*(a.迟到+a.早退)-10*a.旷工+5*a.加班 from (select E_Name,count(case when atd='迟到' then 1 end) as '迟到',count(case when atd='早退' then 1 end) as '早退',count(case when atd='旷工' then 1 end) as '旷工',count(case when atd='加班' then 1 end) as '加班' from Record group by E_Name having E_Name='211') a
3. OK,完成,上面第2个SQL就是最终你要的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询