2013-12-17 1 views
0

Я пытаюсь создать отчет, который проверяет инструкцию SQL для возвращаемых данных и на основе набора результатов заполняет столбец с помощью Y/N.Oracle - Нет строк, возвращаемых/вставляющих значение

Я попытался использовать функциональность NVL, но я думаю, что я полностью теряю точку этой функции. В нижеприведенном запросе нет никаких строк, поэтому нет «нулевого значения», поэтому Функция NVL не будет работать в моем случае - я пробовал COALESCE, но я не могу обойти встроенный SELECT и вызывать таблицу DUAL DUAL.

Есть ли способ, который я могу использовать для предоставления значения в случае отсутствия строк?

SELECT 
TO_CHAR(AR_WD_EVENTS.EVENT_ID) 
FROM 
AR_WD_EVENTS, AR_PI_SITE_BLOCKS 
WHERE AR_WD_EVENTS.EVENT_BLOCK_ID = {!AR_PI_SITE_BLOCKS.SITE_ID} 
AND TO_CHAR(AR_WD_EVENTS.EVENT_CONTRACT_ID) = 1555 

Это синтаксис QB - «6». Shutters - Event "- это имя SQL-запроса выше, в основном я хочу, чтобы оператор SQL возвращал соответствующий« Идентификатор события », если он не находит« Идентификатор события », а затем дает значение NULL/Zero/NA, так что я могу использовать его в инструкции QBF ниже - так как он стоит, SQL-запрос работает нормально, но только тогда, когда есть значение для возврата.

$QBFvalue = 'Y'; 

if ({%6. Shutters - Event} = 'N/A') $QBFvalue = 'N'; 

return $QBFvalue; 

Большое спасибо

ответ

1

Если вы всегда получите либо один (единственный идентификатор события) или нулевой результат, вы можете использовать функцию MAX:

SELECT 
MAX(TO_CHAR(AR_WD_EVENTS.EVENT_ID)) 
FROM 
AR_WD_EVENTS, AR_PI_SITE_BLOCKS 
WHERE AR_WD_EVENTS.EVENT_BLOCK_ID = {!AR_PI_SITE_BLOCKS.SITE_ID} 
AND TO_CHAR(AR_WD_EVENTS.EVENT_CONTRACT_ID) = 1555 

MAX функция будет возвращать Null когда нет соответствующих строк, и он будет возвращать EVENT_ID, когда есть одна соответствующая строка.

+0

Решение count/max работает в некотором отношении, т. Е. Что они выполняют задание, но я хочу иметь возможность вызвать набор результатов для оператора SQL для заполнения отчета - поэтому в этом случае count/max позволит я хотел сказать, что значение Y/N было найдено, что я хочу сделать, это показать, что такое значение, использование функции max/count не позволило бы этого, поэтому я смотрел на NVL/2 и Функции COALESCE - Спасибо за ваш ввод, хотя – cstones88

+0

MAX() вернет найденное значение, и вы можете показать это значение. Единственным ограничением является то, что только одно значение будет возвратом (самым высоким значением), но это не проблема, если данный EVENT_CONTRACT_ID может быть связан только с одним EVENT_ID. Поскольку вы не указали структуру участвующих таблиц, это неясно. –