2016-09-09 6 views
0

私は、0より大きい変数の数を数える列を作成する必要があり、id列の各値に対してnull以外の値がある場合はnullを返しません。いくつかのブール演算の間の和を使用している私は何を作るために管理MySQLは合計演算のnull値を避けますか?

IF 'A' THEN 'B' ELSE 'C'(少なくとも、それは私が持っているものだ)

select ID, `jul`, `aug`, `set`, `oct`, `nov`, `dec`, 
((((not `jul`) or 1) and (`jul` or 0)) 
+(((not `aug`) or 1) and (`aug` or 0)) 
+(((not `set`) or 1) and (`set` or 0)) 
+(((not `out`) or 1) and (`out` or 0)) 
+(((not `nov`) or 1) and (`nov` or 0)) 
+(((not `dec`) or 1) and (`dec` or 0))) as sum from table; 

それは最初のビューで動作しますが、そこにある場合行内のヌル値の場合、sumはそれぞれのidごとにnullを返します。

この問題を回避するにはどうすればよいですか?

+0

"set"は "sep"、btw ...となるはずです。 –

答えて

0

は、私はそれがうまくいくと思う

SUM(IFNULL(jul,0)+IFNULL(ago,2)) as sum from table 

/* 
    obs: the SUM is good to sum multiple values 
    IFNULL returns 0 to the sum if jul is null and 2 for ago if ago is null in the example. 
*/ 

を試してみてください。 :)

+0

ifnullが私の場合を助けました。最初は、変数の合計を使用していましたが、私は総和が0と1の合計を求めていたので、それを論理演算と組み合わせて使用​​しました^^ ifnull((((not 0) – jlsalles

+0

私はまた、その変数のすべてがnull値を持つたびにnullを表示するように合計を求めていましたが、そのような方法がありますか? – jlsalles

0

nullを処理するには、​​3210または別名を使用する必要があります。ヌル値は未知数を表します。あなたは未知数を追加したり、未知数以外を取得することはできません。

NULL + 1 = NULL 
COALESCE(NULL, 0) + 1 = 1 
-1

nullを0にするには、isnull(columnname, 0)を使用します。だから、isnull('jul',0)+isnull('aug',0)など

関連する問題