具有COUNT条件的GROUP BY

时间:2017-10-13 10:44:04

标签: sql sql-server group-by

I have a result set such as:  

  Code      No
   1         *
   1         -
   1         4
   1         
   1

现在我基本上想要一个包含2列的查询,总数的计数和没有数字的计数。

  Code      No_Number    Total
   1         4             5

我假设这需要一个分组和一个计数,但我怎么能在这样的查询中做两个不同的计数呢?

这是我到目前为止所做的,但我对其余部分感到有些困惑

 SELECT CODE,NO
 Sum(Case when No IN ('*', '-', '') then 1 else 0 end) as Count

2 个答案:

答案 0 :(得分:8)

我认为你基本上只需要GROUP BY

SELECT CODE,
       SUM(Case when No IN ('*', '-', '') then 1 else 0 end) as Count,
       COUNT(*) as total
FROM t
GROUP BY CODE;

答案 1 :(得分:0)

嗯,这花了一点时间:-),但是这里是......我使用CASE语句来创建和填充No_Number列;如果原始表值是一个数字或者给它一个NULL,数据库给原始表中的行值为1,如果不是,则将其从COUNT中丢弃。然后当它进行计数时,它只识别最初为数字的值并忽略其他所有值。

如果结果集在表或临时表中:

SELECT Code,
       COUNT(CASE WHEN [No] NOT LIKE '[0-9]' THEN 1 ELSE NULL END) AS No_Number,
       COUNT(Code) AS Total
FROM <tablename>
GROUP BY Code

如果结果集是先前查询的乘积,则可以使用CTE(公用表表达式)来获得所需的结果,或者可以在先前的查询中包含此代码的部分内容。