2つの日付の間のすべてのアイテムの価格をカウントするクエリがあります。 select文は次のとおりです。
SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
すべてのテーブルが適切に設定されていると想定できます。
2つの日付の間で選択を行い、その日付範囲内にアイテムがない場合、関数はTotalPriceとして0ではなくNULLを返します。
レコードが見つからない場合、NULLではなく0が返されることを確認するにはどうすればよいですか?
ほとんどのデータベースサーバーには [〜#〜] 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の単一行が返されます。これにより、修正が0の単一行になります。
これが説明に役立つことを願っています。
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
これでうまくいくはずです。
SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
SELECT COALESCE(
(SELECT SUM(Price) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
, 0)
テーブルの応答に行がある場合、SUM(Price)を返します。 SUMがNULLまたは行がない場合、0を返します。
行が見つからない場合、MSSQLではCOALESCE(SUM(Price)、0)を入れても機能しません。
編集:他の誰もが私にそれを打つように見える笑
答えを見つけました。
ISNULL()
は、null値がある場合の処理を決定します。
この場合、関数はnull値を返すため、代わりに0を指定する必要がありました。
SELECT ISNULL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded
BETWEEN @StartDate AND @EndDate)
使用できます
SELECT ISNULL(SUM(ISNULL(Price, 0)), 0)
。
私はそれがうまくいくと99%確信しています。
Oracle/PLSQL:
NVL関数
_SELECT NVL(SUM(Price), 0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
_
SUM(Price)
がnull値を返した場合、このSQLステートメントは_0
_を返します。それ以外の場合、SUM(Price)
値を返します。