66

2 つの日付の間のすべてのアイテムの価格をカウントするクエリがあります。選択ステートメントは次のとおりです。

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

すべてのテーブルが適切に設定されていると想定できます。

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

レコードが見つからない場合、NULL ではなく 0 が返されるようにするにはどうすればよいですか?

4

8 に答える 8

110

ほとんどのデータベース サーバーにはCOALESCE関数があり、null 以外の最初の引数を返すため、次のように実行する必要があります。

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

色々と話題になっているようですので、

COALESCE/ISNULL は、一致する行がない場合でも NULL を返します。SQL Server にそのまま直接コピー アンド ペーストできる次のクエリを試してください。

SELECT coalesce(SUM(column_id),0) AS TotalPrice 
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)

where 句は sys.columns のすべての行を考慮から除外しますが、'sum' 演算子は null である 1 つの行が返されることに注意してください。

于 2009-06-17T03:55:54.553 に答える
20

使用できますISNULL()

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

これでうまくいくはずです。

于 2009-06-17T03:56:01.900 に答える
11
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
于 2009-06-17T04:11:11.000 に答える
6
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 では機能しません。

于 2011-12-22T06:58:52.580 に答える
6

編集:他のみんなが私を打ち負かしたようです(笑)

答えを見つけました。

ISNULL()null 値がある場合の処理​​を決定します。

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

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate)
于 2009-06-17T03:56:12.883 に答える
5

あなたが使用することができます

SELECT ISNULL(SUM(ISNULL(Price, 0)), 0).

私はそれがうまくいくと99%確信しています。

于 2009-06-17T04:38:36.020 に答える
-5

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

すなわち

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

お役に立てれば!!

于 2015-01-23T12:39:04.267 に答える