2013-12-17 16 views
0

我想創建一個報告,它檢查返回的數據的SQL語句,並根據結果集使用Y/N填充列。Oracle - 沒有行返回/插入一個值

我已經嘗試使用NVL功能,但我認爲我完全忽略了這個函數的重點 - 下面的查詢不返回任何行,所以沒有'null值',這就是爲什麼NVL函數在我的情況下不起作用 - 我試過了COALESCE,但我無法繞過嵌入的SELECT並調用一個虛擬的'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語句返回相應的'Event ID',如果它沒有找到'Event ID',那麼給出NULL/Zero/NA的值,以便我可以在下面的QBF語句中使用它 - 因爲它表示SQL查詢可以正常工作,但只有在有值返回時才適用。

$QBFvalue = 'Y'; 

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

return $QBFvalue; 

非常感謝

回答

1

如果你總是會得到一方(單一事件ID)或爲零的結果,你可以使用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

計數/最大解決方案在某些方面工作,即他們完成了工作,但我希望能夠調用SQL語句的結果集來填充報表 - 所以在這種情況下,計數/最大值將允許我說Y/N值已經找到了,我想要做的就是顯示這個值是什麼,使用max/count函數不允許這樣做,因此我爲什麼要看NVL/2和COALESCE函數 - 感謝您的輸入,但 – cstones88

+0

MAX()將返回找到的值,並且可以顯示此值。唯一的限制是只有一個值將會返回(最高值),但如果給定的EVENT_CONTRACT_ID只能關聯到單個EVENT_ID,則這不是問題。既然你沒有顯示涉及表格的結構,那麼這是不清楚的。 –