Sql case语句中的SUM函数

Sql case语句中的SUM函数,sql,oracle,Sql,Oracle,下面的查询是在一个包含两个字段的表上执行的:BEGDATE和AMOUNT(都是varchar2)。 目的是按如下方式显示数据: Year Semester Total 2017 Sem1 545 2017 Sem2 9877 2020 Sem1 444 其想法是根据学年和学期计算字段总数。 以下查询能够返回以下内容: Year Semester 2017 Sem1 2017 Sem2 2020 Sem1

下面的查询是在一个包含两个字段的表上执行的:BEGDATE和AMOUNT(都是varchar2)。 目的是按如下方式显示数据:

 Year  Semester Total
 2017   Sem1     545
 2017   Sem2     9877
 2020   Sem1     444
其想法是根据学年和学期计算字段总数。 以下查询能够返回以下内容:

 Year  Semester 
 2017   Sem1     
 2017   Sem2     
 2020   Sem1     
我应该在哪里使用
SUM(TO_NUMBER(AMOUNT))
才能获得期望的结果

 SELECT DISTINCT(SUBSTR (BEGDATE, 1, 4)) AS YEAR,
       CASE
          WHEN SUBSTR (BEGDATE, 5, 2) BETWEEN 1 AND 3
             THEN 'SEM1'
          WHEN SUBSTR (BEGDATE, 5, 2)  BETWEEN 4 AND 6
             THEN 'SEM2'
          WHEN SUBSTR (BEGDATE, 5, 2)  BETWEEN 7 AND 9
             THEN 'SEM3'
          ELSE 'SEM4'
       END SEMESTER
  FROM EMP 
  ORDER BY YEAR DESC,SEMESTER

只需在选择列列表的末尾添加一个和即可

SELECT   SUBSTR (begdate, 1, 4) AS YEAR,
         CASE
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 1 AND 3
               THEN 'SEM1'
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 4 AND 6
               THEN 'SEM2'
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 7 AND 9
               THEN 'SEM3'
            ELSE 'SEM4'
         END semester,
         SUM (TO_NUMBER (amount)) sum_val
    FROM emp
GROUP BY SUBSTR (begdate, 1, 4),
         CASE
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 1 AND 3
               THEN 'SEM1'
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 4 AND 6
               THEN 'SEM2'
            WHEN SUBSTR (begdate, 5, 2) BETWEEN 7 AND 9
               THEN 'SEM3'
            ELSE 'SEM4'
         END
ORDER BY YEAR DESC, semester;
此外,在进行分组时,您不再需要使用不同的属性。

添加了
SUM

SELECT A.YEAR,A.SEMESTER, SUM(TO_NUMBER(A.AMOUNT)) AS SUM_AMT
FROM
 (SELECT DISTINCT(SUBSTR (BEGDATE, 1, 4)) AS YEAR,
       CASE
          WHEN SUBSTR (BEGDATE, 5, 2) BETWEEN 1 AND 3
             THEN 'SEM1'
          WHEN SUBSTR (BEGDATE, 5, 2)  BETWEEN 4 AND 6
             THEN 'SEM2'
          WHEN SUBSTR (BEGDATE, 5, 2)  BETWEEN 7 AND 9
             THEN 'SEM3'
          ELSE 'SEM4'
       END SEMESTER,
AMOUNT
  FROM EMP 
  ORDER BY YEAR DESC,SEMESTER)A
GROUP BY YEAR,SEMESTER
ORDER BY YEAR DESC, SEMESTER;

应该使用适当的数据类型,如果要存储日期,请使用
日期(时间)
数据类型,如果要存储数字,请使用数字数据类型。这就是他们在那里的目的!您可以添加为另一个选定属性的总和,别忘了按分组。我们是要在线教授JDOE,还是他参加了基本的SQL开发课程?是的,这就是SO的所有问题,以及类似游戏化网站(expertsexchange)的其他帮助。我给你5英镑让你帮我做作业