2010-10-17 57 views
0

我有兩個表。一張桌子實際上由日常事件組成,而另一張桌子只是另一張桌子的摘要。我有一個存儲過程,刪除每日表中存儲的值。現在每一次刪除後,彙總表也應該更新,以便SUM現在將被更新,而不是被刪除的值的更新。NULL值上的數據庫表更新錯誤

我的問題是,當日報表已經被清空,然後自動總結起來生成NULL值(因爲沒有條目在它裏面找到)。應用程序然後崩潰,因爲我的摘要表不應該包含NULL值。

如果可能的話,我怎麼能創建一個過程,這將使值0,如果SUM結果爲NULL?

查詢示例:

DELETE FROM Daily WHERE DailyID = @DailyID 

SELECT @TotalA = SUM(o.OutA), @TotalB = SUM(o.OutB), @TotalC = SUM(o.OutB) 
FROM Daily 
WHERE Day = @Day 

UPDATE Summary 
SET MyA = @TotalA, MyB = @TotalB, MyC = @TotalC 
WHERE SummaryID = @SummaryID 

從以上我的查詢,讓我們說,我有我的日常表內共有10個條目。 2是週三的參賽作品,3是週五,5是週六的參賽作品。所以基本上,我的彙總表將有三個條目 - 每個星期三,星期六和星期五的摘要。

當我問我的程序刪除所有條目週三,則會有留下8個條目(無星期三)。因此,我必須更新我的摘要條目,說明所有星期三條目已被刪除。但是,我不希望我的彙總表忘記他有一個星期三。相反,我希望他保留星期三的條目,其中總摘要值爲零(0)。

回答

1

這是在SQL Server上的嘗試ISNULL(SUM(列),0)。

+0

我會使用'COALESCE',因爲它是標準的,適用於Oracle,Sql-Server,MySQL,... – 2010-10-17 12:24:44

+0

正是我需要的!非常感謝你! – Smiley 2010-10-17 12:25:30

+0

順便說一句,是的。它在SQL Server 2008中:) – Smiley 2010-10-17 12:25:48

1

可以使用COALESCE用值來代替NULL

SELECT COALESCE(your_column, 0) 
FROM your_table 

它需要的參數列表,並返回第一個是NOT NULL


編輯:你的榜樣,你可以做這樣的事情:

UPDATE Summary 
SET MyA = Coalesce(@TotalA, 0), 
    MyB = Coalesce(@TotalB, 0), 
    MyC = Coalesce(@TotalC, 0) 
WHERE SummaryID = @SummaryID 
+0

你能給我一個樣本嗎?我更新了我的問題。請好好看看嗎?非常感謝你! – Smiley 2010-10-17 12:20:14

+0

@Kim:更新了我的答案。 – 2010-10-17 12:24:10

+0

謝謝!這個作品也是:) – Smiley 2010-10-17 12:27:30