2017-10-16 3 views
1

このクエリの実行中に、GRAND TOTAL列が空白(ORACLE 11G)になっています。ORACLE 11Gに列合計を表示できません

QUERY:

 
select NVL(TO_CHAR(APPROVER_EMPLOYEE_NAME), 'Grand Total') as EMPLOYEE_NAME, 
SUM(ONE_DAY) one_day, 
SUM(TWO_DAYS) TWO_DAYS , 
SUM(THREE_DAYS) THREE_DAYS, 
SUM(ONE_DAY + TWO_DAYS + THREE_DAYS) TOTAL 
from ic_request 
group by rollup (APPROVER_EMPLOYEE_NAME); 
EMPLOYEE_NAME   ONE_DAY  TWO_DAYS  THREE_DAYS  TOTAL 
-------------------------------------------------------------------------- 
abc      271   64  
xyz      60   09    01  
-------------------------------------------------------------------------- 
Grand Total    331   73    01 

'ABC' 行と 'THREE_DAYS' 列に対応する値はありません。 は、誰もが行abcためTHREE_DAYS列がnullであるためです総行>

答えて

3

をまとめて「TOTAL」列を表示するために助けてください。 COALESCEを使ってゼロをゼロにして、適切に加算します。 "行ABCのためのTHREE_DAYS列がnullである" ので

クエリ

select NVL(TO_CHAR(APPROVER_EMPLOYEE_NAME), 'Grand Total') as EMPLOYEE_NAME, 
SUM(COALESCE(ONE_DAY, 0)) one_day, 
SUM(COALESCE(TWO_DAYS, 0)) TWO_DAYS , 
SUM(COALESCE(THREE_DAYS, 0)) THREE_DAYS, 
SUM(COALESCE(ONE_DAY, 0) + COALESCE(TWO_DAYS, 0) + COALESCE(THREE_DAYS, 0)) TOTAL 
from ic_request 
group by rollup (APPROVER_EMPLOYEE_NAME); 
+0

はそうではありませんが、理由はすべての単一のレコードにONE_DAYまたはTWO_DAYSまたはTHREE_DAYSのいずれかがnullです。したがって、ONE_DAY + TWO_DAYS + THREE_DAYSはすべてのレコードでNULLになります。したがって、合計はNULLです。これ以外にあなたの答えは正しいです。 –

関連する問題