我有一个生成查询结果的视图,如下所示:
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中是否有任何解决方案?
答案 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',它将返回一个负值。