Faça um
GROUP BY
, use COUNT
(que conta apenas valores não nulos):select id,
count(value1) as value1,
count(value2) as value2,
count(value3) as value3
from table1
group by id
Editar :
Se os valores não forem nulos, mas '.' (ou outra coisa), use
case
expressões para fazer contagem condicional, algo como:select id,
count(case when value1 <> '.' then 1 end) as value1,
count(case when value2 <> '.' then 1 end) as value2,
count(case when value3 <> '.' then 1 end) as value3
from table1
group by id