I have a table (t1) as shown below that contains single-character values in all columns named v%
:
x
Id v1 v2 v3 v4 v5 v6
100 O O E O E E
103 E O E E O E
I need to count the number of occurrences for “O” and “E” and display them in 2 additional columns. How can I do this?
Expected Output:
Id v1 v2 v3 v4 v5 v6 O E
100 O O E O E E 3 3
103 E O E E O E 2 4
Advertisement
Answer
I would use apply
and aggregation:
select t.*, v.*
from t cross apply
(select sum(case when v.v = 'O' then 1 else 0 end) as num_os,
sum(case when v.v = 'E' then 1 else 0 end) as num_es
from (values (t.v1), (t.v2), (t.v3), (t.v4), (t.v5), (t.v6)) v(v)
) v;