2017-02-27 33 views
2

我正在尝试执行SUM函数,但我只希望它在所有字段都不为空的情况下返回一个值。现在,当它执行SUM时,它会跳过NULL值并刚刚添加非空值。我想要发生的是,如果总和中只有一个值为空,它就会返回null。下面是一个示例表:SQL - 如果所有字段都不为空,则获得字段总和

Table_1 
    ------------- 
    Price Quant 
    10.00 | NULL 
    11.00 | 100 

下面是我运行查询:

SELECT SUM((Price * Quant)) FROM [Table_1] 

在这一点上,它会返回1100的值,我想它返回NULL,而不是因为第一条记录的Price * Quant为空。

回答

0
SELECT SUM((Price * Quant)) FROM [Table_1] 
WHERE Price IS NOT NULL WHERE Quant IS NOT NULL 

您可以运行此脚本

+0

我认为你的意思是'价格不为零且定量不为零' – 3BK

+0

是的,我的意思是这个 –

+0

那么,当你被告知你的错误时,你可以更新你的答案。无论如何,您的查询获得与OP的查询相同的结果。似乎你并没有理解这个请求。 –

2

你可以这样做:

Select 
    case when count(
    case when price + quant is null then 1 end 
) = 0 then sum(price*quant) end as val 
From your_table; 

我们正在检查价格+定量为null,因为空+什么是零,如果价格或定量是null,它将返回null。你当然可以使用其他的算术运算,但我认为总和是最轻的。

你也可以做不同的检查:

Select 
    case when count(
    case when price is null or quant is null then 1 end 
) = 0 then sum(price*quant) end as val 
From your_table; 
0

我会做这样的...

SELECT 
    CASE 
     WHEN MAX(T2.NoValue) IS NOT NULL 
      THEN NULL 
     ELSE SUM(Price * Quant) 
    END AS Total 
FROM Table_1 T1 
LEFT JOIN 
(
    SELECT TOP 1 1 AS NoValue 
    FROM Table_1 
    WHERE Quant IS NULL 
    OR Price IS NULL 
) T2 
    ON NoValue = 1 
; 
0

怎么样这样:

SELECT case when Quant is null then null else SUM((Price * Quant)) as this_sum end FROM [Table_1] 
+0

'当Quant'???哪个Quant?表中有几个。 –

0

如果你想测试Price和Quant的无效性,可以使用以下内容:

-- Sample T-SQL schema to demonstrate the SQL query 
DECLARE @tb TABLE 
(
    Price INT NULL, 
    Quant INT NULL 
) 

INSERT INTO @tb(price, quant) VALUES (10, null) 
INSERT INTO @tb(price, quant) VALUES (20, 100) 

IF EXISTS(SELECT 1 FROM @tb WHERE (price + quant) IS NULL) 
    SELECT NULL AS C 
ELSE 
    SELECT SUM(price * quant) AS C 
    FROM @tb 

如果您只需要测试quant,然后用“quant”替换“(price + quant)”。

相关问题