2011-04-27 35 views
1

我在做tot := tot + v_row.SAVINGS;其中tot初始化爲0,v_row.SAVINGS初始化爲null如何使用Null求和

現在我使用nvl function得到了v_row.Savings價值0而不是null正如我在求和需要0如果有空,但是當我回到v_row,如果總和值顯示爲0,那麼我必須回報nullblank space值, 我該怎麼做。

注意:我用這個報告目的,所以如果summation的值是零,那麼我應該在報告中顯示空或空白。

+0

你怎麼樣提供一些示例數據和完整的代碼? – diagonalbatman 2011-04-27 15:31:11

+0

示例數據將初始爲0和v_row.Savings初始化爲空值,然後我試圖總結它,基本上我用這個報告的目的如果求和值是0,那麼我需要在報告中顯示空白或空白而不是空。 – Rachel 2011-04-27 15:34:58

+0

這個問題在第一個地方清楚嗎? – Rachel 2011-04-27 15:35:23

回答

3

NULLIF(expr1, expr2)是邏輯上等同於

CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END 

NVL(expr1, expr2)

TOT可以爲NULL和v_row.SAVINGS可以爲NULL。

  • 使用NVL,確保一批返回的除了
  • 使用NULLIF返回NULL,如果總和爲NULL

它可能更適合要挾TOT你之前剛剛NULL返回。

例子:

tot := NULLIF(NVL(tot, 0) + NVL(v_row.SAVINGS, 0), 0) 
+0

不錯的kevpie。總是很好學習新功能。 – Craig 2011-04-27 16:12:26

+0

@craig,我不希望看到它在代碼塊中突出顯示。 – kevpie 2011-04-27 16:20:23

+0

這很好,感謝分享NULLIF功能。我所要做的就是在返回值時檢查'nvl(tot,0)',以便總結出我總是有數字並且不爲空。 – Rachel 2011-04-27 17:05:13

0

這應該工作:

tot := case when tot + v_row.SAVINGS = 0 then null else tot + v_row.SAVINGS end;