Вот еще одна атака грубой силой с использованием подзапроса. Настройка некоторых тестовых данных:
CREATE TABLE MyTable
(
Id int not null
,Col1 char(1) null
,Col2 char(1) null
,Col3 char(1) null
,Col4 char(1) null
)
INSERT MyTable
select 1, 'Y', 'Y', 'Y', 'Y'
union all select 2, 'Y', null, 'N', null
union all select 3, 'Y', null, null, null
union all select 4, null, null, null, null
Я использовал символьные данные для целевого значения, но у вас не должно возникнуть проблем с его преобразованием в числовое значение. Я добавил четвертую строку, чтобы проверить деление на нули (спасибо ps!). Таким образом,
SELECT
mt.ID
,case mt.Col1 when 'Y' then xx.distrib else 0 end
,case mt.Col2 when 'Y' then xx.distrib else 0 end
,case mt.Col3 when 'Y' then xx.distrib else 0 end
,case mt.Col4 when 'Y' then xx.distrib else 0 end
from MyTable mt
inner join (select
ID
,1.0 / ( case Col1 when 'Y' then 1 else 0 end
+ case Col2 when 'Y' then 1 else 0 end
+ case Col3 when 'Y' then 1 else 0 end
+ case Col4 when 'Y' then 1 else 0 end) distrib
from MyTable) xx
on xx.Id = mt.Id
появляется для получения желаемых результатов. (Запустите подзапрос самостоятельно, и вы получите деление на ноль ... но я, честно говоря, понятия не имею, почему выполнение всего запроса не выполняется.