嗨,我有一个带有状态列的表。如何使用 SQL 获取记录总数、通过状态的记录总数和失败状态的记录总数?
问问题
9491 次
4 回答
2
像这样的东西怎么样:
SELECT Status, COUNT(*)
FROM dbo.YourTable
GROUP BY Status WITH ROLLUP
如果这两种状态(通过,失败)是唯一的状态(否则您将需要WHERE Status IN ('fail', 'pass')
另外一个条件),这将起作用 - 并且WITH ROLLUP
还将为您提供所有状态的总行数(Status = NULL
在输出中带有 a)
于 2012-07-24T20:47:08.717 回答
1
我会写一个类似于
select
Count(*) as TotalRecords,
Sum(case where status = 'Pass' then 1 else 0 end) as PassRecords,
Sum(case where status = 'Fail' then 1 else 0 end) as FaileRecords
from Table
于 2012-07-24T20:51:08.930 回答
0
A couple of other alternatives (SQL Server 2008+):
DECLARE @foo TABLE([status] CHAR(4));
INSERT @foo SELECT 'pass'
UNION ALL SELECT 'pass'
UNION ALL SELECT 'fail';
-- option #1:
SELECT [status], c = COUNT(*)
FROM @foo
GROUP BY GROUPING SETS(([status]), ());
-- option #2:
SELECT [status], c = COUNT(*)
FROM @foo
GROUP BY [status]
UNION ALL
SELECT NULL, COUNT(*) OVER() FROM @foo;
于 2012-07-24T21:00:06.793 回答
0
您可以使用 case 语句和聚合来做到这一点:
select count(*), sum(case when status = 'pass' then 1 else 0 end) as pass,
sum(case when status = 'fail' then 1 else 0 end) as fail
from t
于 2012-07-24T20:50:33.280 回答