2016-01-02 69 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