Автоматическая выборка одной записи - PullRequest
1 голос
/ 15 октября 2019

Я выполняю запрос ниже. нет данных, но SQL Nevigator извлекает ОДНУ запись, и эта запись отображается пустой. поэтому я не хочу получать какие-либо записи.

select sum(arrears_edutax) 
  from view_govtax_rpt 
    where trunc(receiptdt) between  '01-Oct-2019' and '14-Oct-2019';

Но не используйте функцию Group BY.

enter image description here

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Попробуйте этот запрос

 select sum(null) c1 from dual where 1=2

Нет данных из-за 1=2, но результат из одной строки

enter image description here

0 голосов
/ 15 октября 2019

нет данных, но SQL Nevigator извлекает ОДНУ запись, и эта запись отображается пустой. поэтому я не хочу получать какие-либо записи

Это не так, как работают агрегированные запросы.

Совокупный запрос без GROUP BY возвращает одну строку. Результатом является агрегирование, примененное к отфильтрованным строкам. Поскольку у вас не было строк, соответствующих вашим критериям, агрегированное значение равно NULL. Если бы вы использовали вместо этого функцию COUNT (), вы бы получили ноль.

Итак, если вы действительно хотите пустой набор результатов (ноль строк), когда нет соответствующих данных, вы можете использовать этот трюк:

select sum(arrears_edutax) 
from view_govtax_rpt 
where trunc(receiptdt) between  date '2019-10-01' and date '2019-10-14'
having count(*) > 0
;

Кстати, вы должны привыкнуть использовать литералы даты вместо того, чтобы полагаться на неявное преобразование данных.

0 голосов
/ 15 октября 2019

Быстрая демонстрация того, что вам нужно

with w0 as 
(
  select 1 x from dual union
  select 2 from dual
), w1 as
(
   select * from w0 where 1=2
)
select c1 from (
  select sum(x) c1 from w1
)
where c1 is not null

Нажмите здесь для демонстрации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...