Гордон Линофф показал вам один способ, который будет работать - и очень важно, чтобы вы следовали этому совету, только делайте это в качестве самого последнего шага в разработке вашего отчета.
Еще лучший вариант - оставить один запрос и использовать вашу внешнюю программу (например, SQL* Plus, или SQL Developer, или Toad, или любое используемое вами программное обеспечение для создания отчетов), чтобы показать все, что вам нужно, вместо null
.
Например, в SQL* Plus вы можете использовать команду SET
(обратите внимание, что это SQL* Plus команда , а не оператор SQL; в частности, Вы не заканчиваете его точкой с запятой.
set null 'no salary'
Вот краткая демонстрация - использование таблицы emp
в схеме scott
(я использую ее для столбца comm
; все зарплаты не являются нулевыми в таблице, но некоторые комиссии являются нулевыми.) Сначала я показываю результаты со значением по умолчанию (ничего не показано для null
), затем я показываю, как я запускаю команду SET
, а затем повторно запускаю запрос .
Обратите внимание на существенное преимущество этого таким образом: даже если мы добавили «текст» в столбец, ненулевые значения по-прежнему отображаются как числа - это означает, что они по-прежнему отображаются по правому краю. Благодаря решению Гордона Линоффа все в этом столбце считается строкой, поэтому все числа будут выровнены по левому краю, что затруднит чтение столбца.
SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;
EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7499 ALLEN SALESMAN 1600 300
7521 WARD SALESMAN 1250 500
7654 MARTIN SALESMAN 1250 1400
7698 BLAKE MANAGER 2850
7844 TURNER SALESMAN 1500 0
7900 JAMES CLERK 950
6 rows selected.
SQL> set null 'no comm'
SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;
EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7499 ALLEN SALESMAN 1600 300
7521 WARD SALESMAN 1250 500
7654 MARTIN SALESMAN 1250 1400
7698 BLAKE MANAGER 2850 no comm
7844 TURNER SALESMAN 1500 0
7900 JAMES CLERK 950 no comm
6 rows selected.