5

次の値を含むテーブル:

Column1  Column2
1        NULL
NULL     4
2        NULL
NULL     5
3        6

次のクエリ:

SELECT 
    SUM([Column1] + [Column2] ) 
FROM [myTable]

9いつ返すべきかの値を返します21。なんで?どのようにして値に到達しますか?

次のように追加することでSUMを修正できることを私は知っていますISNULL

SELECT 
    SUM(ISNULL([Column1], 0) + ISNULL([Column2], 0)) 
FROM [myTable]

しかし、値の背後にあるロジックを知りたい9

4

7 に答える 7

7

nullCOALESCEに変換するために使用します。( null 値をゼロにしたい場合はこれで終わりです。 )0

SELECT SUM(COALESCE(column1,0) + COALESCE(column2,0))
FROM table1
于 2012-10-30T03:32:02.900 に答える
4

正確には との合計は何nullですか? がどこから来るかに注意してください9: null 以外の と を持つ唯一の行Column1ですColumn2

もちろん、実行可能なソリューションの 1 つが既に投稿されています。しかし、それでは、修正にジャンプすることのどこが楽しいのでしょうか?

(OPのリクエストでコピペしました)

于 2012-10-30T03:52:14.577 に答える
3

合計する前に値 +NULL を追加しているため

sum(column1) + sum(column2) を試す

于 2012-10-30T03:35:12.150 に答える
1

ISNULL 関数を使用して、目的の動作を取得します。

SELECT SUM(ISNULL(Column1, 0) + ISNULL(Column2, 0)) FROM [myTable]
于 2012-10-30T03:32:38.333 に答える
1

Null値の問題です。

SELECT SUM(IsNull(Column1, 0) + IsNull(Column2, 0) ) FROM [myTable]

最小でも常に 0 になるようにします。

ありがとうございました

于 2012-10-30T03:34:13.943 に答える
1
  1. 数値 + NULL = NULL
  2. SUM() 関数は、行ごとに式を計算して操作し、NOT_NULL 値を返します。そして、すべての結果が合計されて返されます。

これが、結果が 9 である理由です 。ISNULL(expression, replacement_value)は、この状況で役立ちます。:)

于 2012-10-30T03:52:47.653 に答える
1

別の説明(誰かにとってよりうまくいく場合に備えて):

NULL は影響します+が、影響しません。NULLSUM()が -ed の場合、NULL+と評価され、SUM の場合は無視されます。(ただし、単一の引数が値ではない場合は NULL を返すSUM() ことができます。)

したがって、データ サンプル (最後の行) には に対して NULL 以外の結果を生成する行が 1 つだけあり+、その結果は9であり、これもSUM()返されます。

于 2012-10-30T07:51:00.633 に答える