2016-01-02 112 views
0

我有2列(時間和材料),我想總結一下。 問題是我只有在兩個數據都是「真」的情況下才能得到總和。所以如果我的時間是「真實的」並且只有材料是「假的」,我什麼都不會回來。請幫助獲得總和,即使列錯誤/真

SELECT ((SELECT ROUND(SUM([Time]*[Price]),0) FROM [tblTime] Y WHERE Y.[OwnerId] = <ID> AND Y.[Invoice] = 'True') 
+ 
(SELECT ROUND(SUM([Amount]*[Price]),0) FROM [tblMaterial] M WHERE M.[OwnerId] = <ID> AND M.[Invoice] = 'True')) 
+2

請發佈你的表結構。還有,你使用的是哪個數據庫。 – minatverma

回答

0

如果你的領域之一是不True,你在這個組件有效地得到NULL值,當你添加NULL和任何數量的結果總是NULL

爲了解決這個問題,你可以使用函數COALESCE,以確保如果你的價值是NULL然後COALESCE使用備用價值0

SELECT COALESCE(
    (SELECT ROUND(SUM([Time]*[Price]),0) 
    FROM [tblTime] Y 
    WHERE Y.[OwnerId] = <ID> AND Y.[Invoice] = 'True') 
    , 0) -- value 0 is used only if SELECT returns NULL 
+ 
COALESCE(
    (SELECT ROUND(SUM([Amount]*[Price]),0) 
    FROM [tblMaterial] M 
    WHERE M.[OwnerId] = <ID> AND M.[Invoice] = 'True') 
    , 0) -- value 0 is used only if SELECT returns NULL 
+0

非常感謝你,它工作正常......也許你也可以幫助我這樣的總和來解釋:23.200如果總數是23200不帶小數:) – Kristoffer

+0

@Kristoffer請避免在評論中跟進問題。問另一個問題,而不是 – dotnetom

+0

好的,對不起。不知道規則 – Kristoffer

0

也許還有用NULL問題

SELECT (
    ISNULL(
     SELECT ROUND(SUM([Time]*[Price]),0) 
     FROM [tblTime] Y 
     WHERE Y.[OwnerId] = <ID> AND Y.[Invoice] = 'True' 
     , 0) 
    + 
    ISNULL(
     SELECT ROUND(SUM([Amount]*[Price]),0) 
     FROM [tblMaterial] M 
     WHERE M.[OwnerId] = <ID> AND M.[Invoice] = 'True' 
     , 0) 
    ) 
+0

感謝您的答案......第一個答案正常工作。保重 :) – Kristoffer