计算值x至少一次的列

时间:2016-02-16 16:59:14

标签: sql-server count

假设我有这张表:

 A    B    C
------------
 1    0    0
 0    0    1
 1    0    1
 0    0    0

我需要发生1的列数(不管它出现的次数)。因此,在这个例子中,计数将是2,因为它出现在2列A& A中。 C。 如何在SQL服务器上完成?

编辑:来自评论

  

列数可能已修复但未知

1 个答案:

答案 0 :(得分:1)

如果已知列数,下面的查询将为您提供正确的结果,对于未知的列数,此查询可以是动态的。

SELECT 
  MAX(CASE WHEN colA = 1 THEN 1 ELSE 0 END) +
  MAX(CASE WHEN colB = 1 THEN 1 ELSE 0 END) +
  MAX(CASE WHEN colC = 1 THEN 1 ELSE 0 END) +
  --...
  MAX(CASE WHEN colZ = 1 THEN 1 ELSE 0 END) as CountOfColumns
FROM tableT 

以下是动态查询:

declare @q varchar(max)

select 
  @q= 'select ' + 
       stuff((
         select 
             '+ MAX(CASE WHEN ' + C.name + '  = 1 THEN 1 ELSE 0 END) ' 
         from 
            sys.columns C inner join sys.tables T 
              on C.object_id=T.object_id and T.name='tableT'
         for xml path('')),1,1,'') 
        + ' as CountOfColumns FROM tableT'

exec( @q)