Sql case语句中的SUM函数
下面的查询是在一个包含两个字段的表上执行的:BEGDATE和AMOUNT(都是varchar2)。 目的是按如下方式显示数据: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
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英镑让你帮我做作业