计算有多少列大于0

时间:2014-09-14 12:10:08

标签: sql oracle

我有一个包含一些数字列的表。我需要计算有多少值大于0的值,并将其添加为新列。

例如: 目前的表是:

A | B | C | D | E |
2 | 4 | 0 | 8 | 0 |
0 | 0 | 0 | 0 | 1 |

输出结果为:

A | B | C | D | E | "New column"
2 | 4 | 0 | 8 | 0 | 3
0 | 0 | 0 | 0 | 1 | 1

1 个答案:

答案 0 :(得分:2)

您可以使用强力方法执行此操作:

select t.*,
       ((case when a > 0 then 1 else 0 end) +
        (case when b > 0 then 1 else 0 end) +
        (case when c > 0 then 1 else 0 end) +
        (case when d > 0 then 1 else 0 end) +
        (case when e > 0 then 1 else 0 end)
       ) as NewColumn
from currenttable t;

如果您确实需要表格中的新列,那么您应该这样做:

  • 更改表格以添加新列
  • 运行类似于上述select
  • 的更新语句
  • 考虑触发器以使值保持最新

编辑:

亚历克斯的评论值得一提。在最新版本的Oracle中,您可以添加一个虚拟列,该列将作为表定义本身的一部分进行此计算。与向表中添加新的非虚拟列相比,虚拟列绝对是解决此问题的更好方法。