2014-09-14 2 views
0

У меня есть таблица с числовыми столбцами. Мне нужно подсчитать, сколько из них имеет значения, превышающие 0, и добавить его как новый столбец.Подсчитайте, сколько столбцов больше 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

Я только что отредактировал ваше название темы, чтобы сделать его более явным. Просто говорить больше, чем «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
  • рассмотрим триггер, чтобы сохранить значение уточненный

EDIT:

Комментарий Алексея стоит упомянуть. В более поздних версиях Oracle вы можете добавить виртуальный столбец, который будет выполнять этот расчет как часть самого определения таблицы. Виртуальные столбцы, безусловно, лучший способ решить эту проблему, чем добавление нового не виртуального столбца в таблицу.

+2

Или добавьте его как виртуальный столбец (предположительно 11g или более поздней). –

+0

Спасибо, ребята. Ответ Гордона хорош для меня на тот момент. Большое спасибо! – Omri

+0

Поскольку это вычисляемый столбец, я бы пошел с сигестумом виртуального столбца. Это также уменьшит обслуживание. –

Смежные вопросы