我有一个包含一些数字列的表。我需要计算有多少值大于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
答案 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中,您可以添加一个虚拟列,该列将作为表定义本身的一部分进行此计算。与向表中添加新的非虚拟列相比,虚拟列绝对是解决此问题的更好方法。