oracle sql统计多个列

oracle sql统计多个列,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,我想计算sql中具有特定值的列数。例如: A B C D E 1 2 1 2 2 如何计算有3列的值为2 您可以使用decode进行此操作: Select decode(a, 2, 1, 0) + decode(b, 2, 1, 0) + decode(c, 2, 1, 0) + decode(d, 2, 1, 0) + decode(e, 2, 1, 0) from my_tab 备选用例: Select (case a when 2 then 1 else 0

我想计算sql中具有特定值的列数。例如:

A B C D E
1 2 1 2 2

如何计算有3列的值为2

您可以使用decode进行此操作:

Select decode(a, 2, 1, 0) 
  + decode(b, 2, 1, 0) 
  + decode(c, 2, 1, 0) 
  + decode(d, 2, 1, 0) 
  + decode(e, 2, 1, 0) 
from my_tab
备选用例:

Select (case a when 2 then 1 else 0 end) 
  + (case b when 2 then 1 else 0 end) 
  + (case c when 2 then 1 else 0 end)  
  + (case d when 2 then 1 else 0 end)  
  + (case e when 2 then 1 else 0 end) 
from my_tab

您可以使用“解码”来执行此操作:

Select decode(a, 2, 1, 0) 
  + decode(b, 2, 1, 0) 
  + decode(c, 2, 1, 0) 
  + decode(d, 2, 1, 0) 
  + decode(e, 2, 1, 0) 
from my_tab
备选用例:

Select (case a when 2 then 1 else 0 end) 
  + (case b when 2 then 1 else 0 end) 
  + (case c when 2 then 1 else 0 end)  
  + (case d when 2 then 1 else 0 end)  
  + (case e when 2 then 1 else 0 end) 
from my_tab

为了进一步理解Frank Schmitt的观点,您可以将“要计算的值”隐藏在内联表中,以避免重复:

Select
    decode(a, countthis.countvalue, 1, 0) 
  + decode(b, countthis.countvalue, 1, 0) 
  + decode(c, countthis.countvalue, 1, 0) 
  + decode(d, countthis.countvalue, 1, 0) 
  + decode(e, countthis.countvalue, 1, 0) 
from
  my_tab
 ,(select 2 as countvalue from dual) countthis

为了进一步理解Frank Schmitt的观点,您可以将“要计算的值”隐藏在内联表中,以避免重复:

Select
    decode(a, countthis.countvalue, 1, 0) 
  + decode(b, countthis.countvalue, 1, 0) 
  + decode(c, countthis.countvalue, 1, 0) 
  + decode(d, countthis.countvalue, 1, 0) 
  + decode(e, countthis.countvalue, 1, 0) 
from
  my_tab
 ,(select 2 as countvalue from dual) countthis