计算每个id的值数

时间:2016-03-17 10:31:53

标签: sql oracle

我们假设我有table1:

id  value1  value2 value3
1   z       null    null
1   z       null    null
1   null    y       null
1   null    null    x
2   null    y       null
2   z       null    null 
3   null    y       null
3   null    null    null 
3   z       null    null

我有table2:

    id  
    1  
    2  
    3  

我想计算每个id每列中的值数,以得到这样的输出。 (例如,id 1有2 - z' s,1 y和1 x)

 id value1 value2  value3  
  1   2     1      1     
  2   1      1     0   
  3   1      1     0    

会建议采用什么方法?

我目前正在使用Oracle 12c

1 个答案:

答案 0 :(得分:5)

执行GROUP BY,使用COUNT(仅计算非空值):

select id,
       count(value1) as value1,
       count(value2) as value2,
       count(value3) as value3
from table1
group by id

修改

如果值不为空但是'。' (或其他),使用case表达式来进行条件计数,例如:

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