Вот один из методов:
select t.id,
max(case when v.var = 'A' then 1 else 0 end) as a,
max(case when v.var = 'B' then 1 else 0 end) as b,
max(case when v.var = 'C' then 1 else 0 end) as c,
max(case when v.var = 'D' then 1 else 0 end) as d
from t cross apply
(values (t.var1), (t.var2), (t.var3)) v(var)
group by t.id;
Он упрощает условия, сначала отключая данные. Конечно, вы также можете использовать:
select id,
max(case when 'A' in (var1, var2, var3) then 1 else 0 end) as a,
max(case when 'B' in (var1, var2, var3) then 1 else 0 end) as b,
max(case when 'C' in (var1, var2, var3) then 1 else 0 end) as c,
max(case when 'D' in (var1, var2, var3) then 1 else 0 end) as d
from t
group by id;