如何使用查询在不同列中查找相同值的出现次数

Kri*_*ish 2 sql t-sql sql-server sql-server-2008-r2

当我参加面试时,我遇到了一个有趣的问题,如下所示.问题如下

如何在所有列中找出值1的出现

DECLARE @tbl AS TABLE(Col1 INT, Col2 INT, Col3 INT)
INSERT INTO @tbl
VALUES(1,1,1),(1,2,1),(1,1,3)
Run Code Online (Sandbox Code Playgroud)

我已经分享了如下答案.不确定这是否是一个正确的答案.

SELECT (SELECT COUNT(1) FROM @tbl WHERE COL1 = 1) +
(SELECT COUNT(1) FROM @tbl WHERE COL2 = 1)+
(SELECT COUNT(1) FROM @tbl WHERE COL3 = 1)
Run Code Online (Sandbox Code Playgroud)

请告诉我是否有其他方法可以找到正确的答案

Yog*_*rma 7

你可以使用apply:

select cols, count(*) as occurrence 
from @tbl cross apply 
     ( values ('col1', col1), ('col2', col2), ('col3', col3)
     ) t (cols, val)
where val = 1
group by cols;
Run Code Online (Sandbox Code Playgroud)