假设我有这张表:
A B C
------------
1 0 0
0 0 1
1 0 1
0 0 0
我需要发生1的列数(不管它出现的次数)。因此,在这个例子中,计数将是2,因为它出现在2列A& A中。 C。 如何在SQL服务器上完成?
编辑:来自评论
列数可能已修复但未知
答案 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)