[英]SUM function in a case statement
以下查詢在具有2個字段的表上執行: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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.