SQL Server:COUNT*为零值

如何解决SQL Server:COUNT*为零值

| 我有一张桌子@MemberAttribute
MemberID AttributeID AttributeValue
1            1         False 
1            2         True 
2            1         False
2            2         True 
3            1         False
3            2         False
我想按attributeID分组并获取值为True的属性计数。但是,当某个特定属性的attributetype为false时,我希望它显示0。现在,不显示带有所有错误值的attributeID。 这是SQL查询
SELECT MA.AttributeID,GA.Name,--COUNT(isNull(MA.AttributeID,0)) as AttributCount,CASE WHEN COUNT(MA.AttributeID) > 0 THEN COUNT(MA.AttributeID) Else 0 END AS \'AttributCount\'
--CASE WHEN COUNT(MA.AttributeID) < 0 THEN 0 Else COUNT(MA.AttributeID) END AS \'TOTAL Attributes\'
from GroupAttribute GA
inner join   @MemberAttribute MA on GA.GroupAttributeID = MA.AttributeID
WHERE MA.AttributeValue = \'True\'
GROUP BY MA.AttributeID,GA.Name
FOR AttributeID = 1所有值均为= False ...所以结果是这样的
AttributeID      Name      AttributeCount <br/>
2                Attr2        2 <br/>
我想要
1                 Attr1      0  <br/>
在结果集中也是如此。     

解决方法

        经过一番蠕动,我想出了一个没有
CASE
表情的美女:
SELECT GA.GroupAttributeID AS AttributeID,GA.Name,COUNT(MA.AttributeID) AS AttributeCount
FROM GroupAttribute AS GA 
LEFT OUTER JOIN @MemberAttribute AS MA 
  ON GA.GroupAttributeID = MA.AttributeID AND MA.AttributeValue = \'True\'
GROUP BY GA.GroupAttributeID,GA.Name
这利用了这样一个事实,即如果对于特定的ѭ6ue没有\'True \'值,则由
LEFT OUTER JOIN
产生的
MA.AttributeID
将为
NULL
。传递给
COUNT()
NULL
值将导致
AttributeCount
为零。
LEFT OUTER JOIN
还确保
AttributeID
行的计数为零的行将出现在结果集中。 该查询的假设是所有组属性都在“ 15”表变量中表示。否则,将存在计数为零的行,这些行表示不存在的组属性。如果不希望这样做,可以添加一个
WHERE
子句以将其过滤掉,从而使查询复杂化。如果是这样的话,威尔的解决方案将更加实用。 执行计划与Will的第一个解决方案比较好,该解决方案减少了一个步骤(计算标量)。它确实使用了
LEFT OUTER JOIN
INNER JOIN
,但是,对于这个简单的示例,这两种方法实际上是相同的。有趣的是,如果将表变量转换为相当大的表,这两个解决方案将如何扩展。 威尔针对涉及“ѭ11”的解决方案的实际计划: 我的实际计划:     ,        试试这个-注意note20ѭ中的1是一个任意的非NULL值-可以是\'fred \'或12345-它不是NULL是重要的部分。
SELECT MA.AttributeID,COUNT(CASE WHEN MA.AttributeValue = \'True\' THEN 1 ELSE NULL END) AS \'AttributeCount\'
from GroupAttribute GA
inner join   @MemberAttribute MA on GA.GroupAttributeID = MA.AttributeID
GROUP BY MA.AttributeID,GA.Name
...更加直观(感谢Ken)-请注意,这里的1和0很重要...
SELECT MA.AttributeID,SUM(CASE WHEN MA.AttributeValue = \'True\' THEN 1 ELSE 0 END) AS \'AttributeCount\'
from GroupAttribute GA
inner join   @MemberAttribute MA on GA.GroupAttributeID = MA.AttributeID
GROUP BY MA.AttributeID,GA.Name
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?