2009-06-17 3 views
48

私は2つの日付の間のすべての項目の価格を数えるクエリを持っています。SQL関数から単一の値を取得するときに、NULLを0に変更するにはどうすればよいですか?

SELECT SUM(Price) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

すべてのテーブルが正しく設定されていると仮定できます。

私は2つの日付の間の選択を行うと、その日付の範囲内にアイテムがない場合、関数はTotalPriceとしてNULLを返すのではなく0

がどのように私はレコードが見つからない場合ことを確認することができ、0 NULLではなく返されますか?

答えて

84

ほとんどのデータベースサーバが非nullで最初の引数を返しますCOALESCE機能を持っているので、次はあなたが欲しいものを行う必要があります。

SELECT COALESCE(SUM(Price),0) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

[編集]

だけ明確にします

SELECT coalesce(SUM(column_id),0) AS TotalPrice 
FROM sys.columns 
WHERE (object_id BETWEEN -1 AND -2) 
:について多くの議論があるようですので、物事あなたがあるとして、直接SQL Serverにコピーアンドペーストすることができ、このクエリをしようと、「いいえ行が一致した場合にCOALESCE/ISNULLはまだNULLを返します」

where句はsys.columnsのすべての行を考慮から除外しますが、 'sum'演算子はnullを返す単一の行を返すことになり、修正を0行の単一行に統合します。

これがその説明に役立つことを願っています。

+0

結果がなければ0を返すことを望む質問を読むと、合計の結果がヌルの場合にのみ役に立ちます。 – Tetraneutron

+0

@Tetraneutron:うまくいくと思います。行がなければsum(price)はnullになりますが、常に正確に1つの結果行があります。 – Thilo

+0

COALESCEは、行を戻って操作している間は正常に動作します(この場合はこの操作を行います)。あなたが行を返さなくても、COALESCEはあなたを助けません。 –

12
SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

これはすべきことです。

6

編集:誰もがそれに私を打つよう

は答えを見つけ笑見えます。

ISNULL()は、値がNULLの場合の処理​​方法を決定します。

この場合、my関数はnull値を返します。代わりに0を指定する必要がありました。

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate) 
+0

isnullまたはcoalesceは動作します – BlackTigerX

+0

私はIFNULLがMySQLと同等であり、ISNULLはMSのT-SQL 。 – ojrac

+1

あなたは何をしようとしているのか逆にISNULLの書類を持っています。 私はあなたの代わりにこれをしたいと思う:SUM(ISNULL(Price、0)) – JohnFx

9
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 
+0

これはそれを行う – Tetraneutron

+0

私は空のテーブルでそれをテストし、それはRBarry作品... – CodeRedick

+0

私の答えを参照してください。 ISNULL(またはCOALESCE)を各行ごとに1回、合計して2回使用してください。 SELECT ISNULL(SUM(ISNULL(Price、0))、0)) – dkretz

3

あなたは

SELECT ISNULL(SUM(ISNULL(Price, 0)), 0)を使用することができます。

私は99%確実に機能します。

+5

SUMはNULL値を無視するため、ISNULLは必要ありません。 – sayap

5
SELECT COALESCE(
    (SELECT SUM(Price) AS TotalPrice 
    FROM Inventory 
    WHERE (DateAdded BETWEEN @StartDate AND @EndDate)) 
    , 0) 

テーブルに応答の行がある場合は、SUM(Price)が返されます。 SUMがNULLの場合、または行がない場合は0が返されます。

COALESCE(SUM(Price)、0)を置くと、行が見つからない場合はMSSQLでは機能しません。

+0

これにより、インベントリテーブルから一度に複数の値を取得できなくなります。 – Paul

1

ORACLE/PLSQL:SUM(Price)はnull値を返した場合

NVL関数

SELECT NVL(SUM(Price), 0) AS TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

このSQL文は0を返します。それ以外の場合は、SUM(Price)の値を返します。

-5

これを行う最も簡単な方法は、結果にゼロを追加することです。

すなわち

$A=($row['SUM'Price']+0); 
echo $A; 

は、このことができます願っています!

+1

トピックのスターターに結果を解釈するためのPHPコードがある場合は問題はありますが、質問がSQLに限定されている場合はこれが答えとして行われません。 – Vesper

関連する問題