Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Sql中聚合函数的大小写_Sql_Oracle_Oracle10g - Fatal编程技术网

Oracle Sql中聚合函数的大小写

Oracle Sql中聚合函数的大小写,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我有一个包含用户每月出勤详细信息的表,其中有一个加班列。因此,该表具有以下结构和样本数据: Date - Id - Dept - OT - Status 12/1/2019 - 1001 - HR - 2 - P 12/2/2019 - 1001 - HR - 4 - P 12/1/2019 - 1002 - IT - 2 - P 12/2/2019 - 1002 - IT - 4 - P 我省略了这里的进出时间,因为这不是这里的主要问题。如上所述,加

我有一个包含用户每月出勤详细信息的表,其中有一个加班列。因此,该表具有以下结构和样本数据:

Date      - Id   - Dept - OT - Status
12/1/2019 - 1001 - HR   - 2  - P
12/2/2019 - 1001 - HR   - 4  - P 
12/1/2019 - 1002 - IT   - 2  - P
12/2/2019 - 1002 - IT   - 4  - P 
我省略了这里的进出时间,因为这不是这里的主要问题。如上所述,加班费是为每个用户计算的。因此,很容易计算用户或部门的总加班明细,如下所示:

SELECT DEPT, SUM(OT) TOTAL FROM ATTENDANCE m WHERE M.DATE >= '01-DEC-2019' AND M.DATE <= '10-DEC-2019'
GROUP BY M.DEPT

当语句时,我不确定聚合函数是否可以与
CASE一起使用,或者我是否可以使用上述方法在查询中运行多个范围?谢谢。

您可以使用
大小写来区分所有值。例如:

select 
  dept, 
  sum(ot) as total,
  case when sum(ot) <= 40 then 'g1'
       when sum(ot) > 40 and sum(ot) <= 50 then 'g2'
       else 'g3' end as g
from attendance
where between to_date('2019-12-01', 'yyyy-mm-dd') 
          and to_date('2019-12-07', 'yyyy-mm-dd')
group by dept
选择
部,
总金额(ot),

当求和(ot)40和求和(ot)时,您可以使用
case
区分所有值。例如:

select 
  dept, 
  sum(ot) as total,
  case when sum(ot) <= 40 then 'g1'
       when sum(ot) > 40 and sum(ot) <= 50 then 'g2'
       else 'g3' end as g
from attendance
where between to_date('2019-12-01', 'yyyy-mm-dd') 
          and to_date('2019-12-07', 'yyyy-mm-dd')
group by dept
选择
部,
总金额(ot),

当sum(ot)40和sum(ot)时,您能更明确地说明您想要的输出是什么吗?您似乎在寻找两个结果(加班时间最多为40小时的部门和在给定日期范围内加班时间超过40小时的部门)

查看您的上一个查询:


当M.DATE>=“2019年12月1日”和M.DATE时,您能更明确地说明您想要的输出是什么吗?您似乎在寻找两个结果(加班时间最多为40小时的部门和在给定日期范围内加班时间超过40小时的部门)

查看您的上一个查询:


如果M.DATE>='01-DEC-2019'和M.DATE没有进一步阅读,请先尝试此。。。不要将日期与字符串进行比较。将
'01-DEC-2019'
写入日期('01-DEC-2019'、'DD-MON-YYYY')
(以及其他地方的类似内容),查看查询是否按需工作。无需进一步阅读,请先尝试此操作。。。不要将日期与字符串进行比较。将
'01-DEC-2019'
写入日期('01-DEC-2019','DD-MON-YYYY')
(以及其他地方的类似内容),查看查询是否按需工作。在此处,当我不知道我完全理解你的要求时,我可以写这个-
吗?你希望一个聚合函数是一个
CASE
语句的结果吗?根据您对整个查询的期望输出,可能有一种更简单的方法来获得您期望的结果在这里,我可以写这个-
当我不知道我完全理解您的要求时-您是否希望聚合函数是
CASE
语句的结果?根据整个查询的期望输出,可能有一种更简单的方法来获得期望的结果result@mathguy好的,这不是重点的一部分,但修复了在Oracle中工作的代码。另外还使用了ISO日期格式,删除了英语格式。“不是重点的一部分”是正确的,但仍然-如果我们教某人如何做代数,我们不允许他们除以零,即使这不是他们要求的。不管怎么说,你解决了,所以我取消了否决票。这就是它的工作原理。我本来不会反对的,但这两个答案(都使用字符串表示日期)都是在我已经在OP的问题下的评论中指出后发布的。@mathguy OK,不是问题的一部分,但修复了在Oracle中工作的代码。另外还使用了ISO日期格式,删除了英语格式。“不是重点的一部分”是正确的,但仍然-如果我们教某人如何做代数,我们不允许他们除以零,即使这不是他们要求的。不管怎么说,你解决了,所以我取消了否决票。这就是它的工作原理。我不会反对,但这两个答案(都使用字符串表示日期)都是在我已经在OP的问题下的评论中指出这一点后发布的。
SELECT DEPT, SUM(OT) TOTAL FROM ATTENDANCE m WHERE M.DATE >= '01-DEC-2019' AND M.DATE <= '07-DEC-2019'
HAVING SUM(OT) > 50 GROUP BY M.DEPT
CASE WHEN M.DATE >= '01-DEC-2019' AND M.DATE <= '07-DEC-2019'
AND SUM(OT) <= 40 THEN SUM(OT) 
CASE WHEN M.DATE >= '01-DEC-2019' AND M.DATE <= '07-DEC-2019'
AND SUM(OT) BETWEEN 41 AND 50 THEN SUM(OT) 
select 
  dept, 
  sum(ot) as total,
  case when sum(ot) <= 40 then 'g1'
       when sum(ot) > 40 and sum(ot) <= 50 then 'g2'
       else 'g3' end as g
from attendance
where between to_date('2019-12-01', 'yyyy-mm-dd') 
          and to_date('2019-12-07', 'yyyy-mm-dd')
group by dept