2012-07-24 95 views

回答

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 
+0

我猜想有可能是在状态,我们没有其他的值关心 – automatic 2012-07-26 18:11:11

2

怎么是这样的:

SELECT Status, COUNT(*) 
FROM dbo.YourTable 
GROUP BY Status WITH ROLLUP 

这会工作,如果这两个状态(及格,不及格)是唯一的状态(否则你需要一个WHERE Status IN ('fail', 'pass')条件还) - 和WITH ROLLUP也将给你行的总数(以输出与Status = NULL)所有状态

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 
0

一对夫妇的其他替代品(SQL服务器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;