1

我有一个列(cliente_x_hora,一个数字字段),我放入一个区间并计算每个区间中的数字。我有 3 个文本字段(区间数,区间和初始值之间的值)。当我首先选择两个(具有 5 个间隔和 1000 个值)时,查询运行完美并生成预期的条形图。

查询(带有两个选择文本字段):

SELECT INTERVAL, COUNT(*) TOTAL FROM (  
SELECT CASE WHEN CLIENTE_X_HORA>0 AND CLIENTE_X_HORA<=1000.00 THEN '0<CLIENTE_X_HORA>  <=1000.00'   
WHEN CLIENTE_X_HORA>1000.00 AND CLIENTE_X_HORA<=2000.00 THEN '1000.00<CLIENTE_X_HORA><=2000.00'   
WHEN CLIENTE_X_HORA>2000.00 AND CLIENTE_X_HORA<=3000.00 THEN '2000.00<CLIENTE_X_HORA><=3000.00'   
WHEN CLIENTE_X_HORA>3000.00 AND CLIENTE_X_HORA<=4000.00 THEN '3000.00<CLIENTE_X_HORA><=4000.00'   
ELSE '4000.00<CLIENTE_X_HORA'  END   INTERVAL, CLIENTE_X_HORA  FROM SGD_CAUSA)  
GROUP BY INTERVAL ORDER BY TOTAL 

条形图是这里

问题是当我选择最后一个字段(初始值,例如 2000)时,我的条形图发疯了(我相​​信将丢弃的值加起来低于 2000): http://img40.imageshack.us/img40/5025/querycom5intervalo1000v.png

ELSE(>6000)应该比显示的要小得多。我该如何解决?

最好的问候, DDias

来自 OP 的澄清

查询与上面相同,但从 2000 年开始:

SELECT CASE WHEN CLIENTE_X_HORA>2000 AND CLIENTE_X_HORA<=3000.00... and ends in 6000:ELSE '6000.00<CLIENTE_X_HORA' END INTERVAL, CLIENTE_X_HORA FROM SGD_CAUSA) GROUP BY INTERVAL ORDER BY TOTAL 

将结果放在表格中是不切实际的(我们谈论的是超过 87000 行)当我给出一个不同于 ZERO 的初始值时,总是会发生这种情况

4

1 回答 1

0

ELSE的就是这样。它包括与特定s不匹配的所有内容。WHEN

因此,如果您不是从零开始,则最后一列将包括低于最低限制的所有内容以及高于最高限制的所有内容。

因此,如果您不想要这种行为,请不要使用ELSE。使用WHEN CLIENTE_X_HORA > 6000.00(或任何您的最高限制)作为最后一个条件。

编辑:

  1. 在您的内部查询中过滤掉(使用WHERE)低于最低限制的值。

  2. 由于我们不再有不需要的低范围,您不再需要HAVING我们添加的子句,您甚至可以返回使用ELSE.

  3. 如果您的最低限制为零,那么您将过滤低于 0 的所有内容,我认为这没什么。

于 2013-05-12T21:12:42.463 回答