计算具有非零值的列数

约蒂·普拉卡什·马里克

我有以下脚本,

SELECT COUNT(*) AS Total,
    SUM(CASE WHEN TypeId ='4' THEN 1 ELSE 0 END) AS 'TotalCount1', 
    SUM(CASE WHEN TypeId ='6' THEN 1 ELSE 0 END) AS 'TotalCount2', 
    SUM(CASE WHEN TypeId ='1' THEN 1 ELSE 0 END) AS 'TotalCount3', 
    SUM(CASE WHEN TypeId ='10' THEN 1 ELSE 0 END) AS 'TotalCount4', 
    SUM(CASE WHEN TypeId ='5' THEN 1 ELSE 0 END)  AS 'TotalCount5', 
    SUM(CASE WHEN TypeId ='8' THEN 1 ELSE 0 END)  AS 'TotalCount6' 
    FROM [Party]

请参考屏幕截图作为上述脚本的输出。

我想要的是:我希望“总计”之后的列为具有非零值的列的总数。就像图片中一样,值应为2,因为TotalCount1和Totalcount3的值均为非零。

在此处输入图片说明

胡安·卡洛斯·奥罗佩萨
SELECT COUNT(*) AS Total,
       ...
       ... 
       CASE ( WHEN SUM(CASE WHEN TypeId ='4' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) +  
       CASE ( WHEN SUM(CASE WHEN TypeId ='6' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) + 
       CASE ( WHEN SUM(CASE WHEN TypeId ='1' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) + 
       CASE ( WHEN SUM(CASE WHEN TypeId ='10' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) + 
       CASE ( WHEN SUM(CASE WHEN TypeId ='5' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END) + 
       CASE ( WHEN SUM(CASE WHEN TypeId ='8' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END)  
          as SumOfNonZeros

FROM [Party]

或者更简单

SELECT COUNT(*) AS Total,
       COUNT(CASE WHEN TypeId ='4'  THEN 1 END) AS 'TotalCount1', 
       COUNT(CASE WHEN TypeId ='6'  THEN 1 END) AS 'TotalCount2', 
       COUNT(CASE WHEN TypeId ='1'  THEN 1 END) AS 'TotalCount3', 
       COUNT(CASE WHEN TypeId ='10' THEN 1 END) AS 'TotalCount4', 
       COUNT(CASE WHEN TypeId ='5'  THEN 1 END) AS 'TotalCount5', 
       COUNT(CASE WHEN TypeId ='8'  THEN 1 END) AS 'TotalCount6',
       COUNT( DISTINCT CASE WHEN TypeId IN ('4', '6', '1', '10', '5', '8') 
                            THEN TypeId 
                       END ) as CountOfNonZeros
FROM [Party]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章