0

これは私の質問です:

SELECT [id],[reasoncode], 
[jan], [feb],[mar],[apr],[may,[jun],
[jul],[aug],[sep],[oct],[nov],[dec] from table

今私が知りたいのは、これ以外にWHEREを使用して0をフィルターで取り除く別の方法があるかどうかです。

SELECT [id],[reasoncode], 
[jan], [feb],[mar],[apr],[may,[jun],
[jul],[aug],[sep],[oct],[nov],[dec] from table
WHERE 
[jan] <> 0 and   
[feb] <> 0 and
[mar] <> 0 and
[apr] <> 0 and
[may] <> 0 and
[jun] <> 0 and
[jul] <> 0 and
[aug] <> 0 and
[sep] <> 0 and
[oct] <> 0 and
[nov] <> 0 and
[dec] <> 0
from table

提案?

- - - アップデート

すべての行がゼロの場合にのみ、その行を除外したいと思います。これは私が処理しなければならないデータであるため、利用可能な「月」列はありません。

4

4 に答える 4

1

さて、あなたの目標が何であるかはわかりませんが...

比較を減らしたりSQLを短くしたりすることが目標の場合は、次のように乗算の結果を確認できます。

SELECT * 
  FROM TABLE
 WHERE jan * feb * mar * apr * (... and so on) <> 0 

このように、列の1つがである0場合、式0もであり、条件は満たされません。しかし、私はこれがより良い/より速い/よりクリーンであると言っているのではありません。それはただのトリックです。

于 2012-12-11T10:20:57.663 に答える
1

すべての(月)列が0である場所を除外するため、すべての月列を合計して、次のようにテストします。

Where jan+feb+mar+apr+may+jun+jul+aug+sep+oct+nov+dec<>0

これは、各月の列の有効な値が0または正であり、列がビット列ではなくint列であることを前提としています。毎月負の値が許可されている場合は、次を使用できます

Where abs(jan) + ... + abs(dec) <> 0

ビット列を使用している場合は、

Where convert(int,jan) + ... + convert(int,dec) <> 0
于 2012-12-11T14:51:30.853 に答える
0

新しいバージョンのMYSQLを使用している場合は、LEAST演算子を試して、どの値も0でないことを確認できます。

SELECT [id],[reasoncode],  [jan], [feb],[mar],[apr],[may,[jun],
[jul],[aug],[sep],[oct],[nov],[dec] 
from table 
WHERE  
LEAST([jan],[feb],[mar],[apr],[may],[jun],[jul],[aug],[sep],[oct],[nov],[dec]) <> 0
于 2012-12-11T10:19:50.410 に答える
0

多分このようなもの:

SELECT id,reasoncode, 
       jan, feb,mar,apr,may,jun,
       jul,aug,sep,oct,nov,dec
FROM table
WHERE
  jan*feb*mar*apr*may*jun*jul*aug*sep*oct*nov*dec<>0 
于 2012-12-11T10:20:45.790 に答える