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
答案 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(公用表表达式)来获得所需的结果,或者可以在先前的查询中包含此代码的部分内容。