我在一个Oracle表中有以下数据,我正在尝试基于类型和Qt列执行计算。
TYPE QT STATUS CNT
---- -- ------ ---
E A YES 123
E A NO 2540
E D YES 2
E D NO 787
O A YES 884
O A NO 6957
O D YES 25
O D NO 1360
看起来我现在的预期产量不一样了..如下所示:
TYPE TOTAL A A&Y
---- ----- ---- -----
E+O 12678 10504 1007
E 3452 2663 123
我的旧Oracle SQL如下,但在计算百分比时输出错误:
SELECT * FROM (
SELECT NVL(SUM(DECODE(A.QT,'A',A.CNT,'D',A.CNT)),0) AS "TOTAL",
NVL(SUM(DECODE(A.QT,'A',A.CNT)),0) AS "A ALL",
NVL(SUM(DECODE(A.QT,'A',ROUND(100*(NVL(A.CNT,0)/ A.CNT),2))),0) "A ALL %",
NVL(SUM(DECODE(A.STATUS,'E',A.CNT)),0) AS "E TOTAL",
NVL(SUM(DECODE(A.STATUS,'E',DECODE(A.QT,'A',A.CNT))),0) AS "E & A TOTAL"",
NVL(SUM(DECODE(A.STATUS,'E',ROUND(100 * SUM((DECODE(A.QT,'A',A.CNT)) / SUM(A.CNT)),3))),0) "E & A %"
FROM ALLIN A)
1条答案
按热度按时间nnt7mjpx1#
您可以使用公用表表达式以更具可读性的方式重写查询;
该查询生成预期的结果,并且更易于阅读和调试。
EA
部分假设qt和type都是一个字母,因此它们的串联与EA匹配。如果这不是真的,我建议使用CASE
,a‘la;用于测试的SQLfiddle。