2017-02-27 34 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)」。

相關問題