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 

这样,如果其中一列是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

If you're using a newer version of MYSQL, you could try the LEAST operator, and check that none of the values are 0. Something like:

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 回答