如何从视图中进行SQL计算?

时间:2012-03-06 09:19:53

标签: sql informix

我有一个生成查询结果的视图,如下所示:

channel | current_Month | total_month_count | type | total_type_count |
-----------------------------------------------------------------------
chaA    |             2 |                 1 |    N |                1 |
-----------------------------------------------------------------------
chaB    |             2 |                 2 |    N |                2 |
-----------------------------------------------------------------------
chaA    |             2 |                 3 |    Y |                3 |
-----------------------------------------------------------------------

我想对视图进行查询,该视图可以检索“Y”类型的total_month_count值减去同一通道组下类型“N”的total_month_count值。在这种情况下,有2行会产生影响,即第1行和第3行,它们将是3减1,结果将等于2。

如何在Informix中创建一个可以返回2基于此视图的结果的查询?让我们不要限制Informix,任何其他数据库都会这样做,我只是想知道在SQL中是否有任何解决方案?

3 个答案:

答案 0 :(得分:3)

SELECT  Channel,
        SUM(CASE WHEN Type = 'N' THEN -1 ELSE 1 END * total_month_count) "Calculation"
FROM    yourView
GROUP BY Channel

编辑2

考虑到这一点(在Mark bannister轻轻推动之后)和一些测试我从我的答案中删除了Join版本。它比分组效率低。

答案 1 :(得分:2)

假设您的视图名称为tab_values

select ty.total_month_count - tn.total_month_count, ty.channel 
from tab_values ty, tab_values tn
where ty.channel = tn.channel
and ty.type = 'Y' 
and tn.type = 'N'

答案 2 :(得分:1)

我会尝试以下内容:

SELECT channel,
       SUM(CASE WHEN TYPE = 'Y' THEN total_month_count ELSE 0 END -
       CASE WHEN TYPE = 'N' THEN total_month_count ELSE 0 END )
  FROM t
 GROUP BY channel

它会返回你的total_month_count,其中type ='Y'减去total_month,其中type ='N'按频道分组,这意味着如果对于一个频道,你只输入'N',它将返回一个负值。