2013-07-31 68 views
19

我有一个表,我需要以下列方式显示输出。在case语句中使用sql count

tb_a: 

col1 | reg_id | rsp_ind 

与rsp_ind = 0作为 '新' 和1为 '接受'

输出行的数应

NEW | Accepted 
9 | 10 

我尝试使用下面的查询。

select 
    case when rsp_ind = 0 then count(reg_id)end as 'New', 
    case when rsp_ind = 1 then count(reg_id)end as 'Accepted' 
from tb_a 

而我会得到输出

NEW | Accepted 
NULL| 10 
9 | NULL 

有人能帮助我调整查询来实现输出。 注:我无法添加一个围绕此的总和。它是一个更大的程序的一部分,所以我不能添加超级查询。

+0

你不能添加一个总数,但你可以改变查询吗?或者让它成为子查询? –

+0

我可以添加子查询而不是case语句。但不是超过这个... 添加一个子查询显然带有性能命中...... – Raghav

+2

我看..那么也许你可以将此子查询添加到您的连接子句,而不是做一个内联子查询..这可能在你的代码? –

回答

54
SELECT 
    COUNT(CASE WHEN rsp_ind = 0 then 1 ELSE NULL END) as "New", 
    COUNT(CASE WHEN rsp_ind = 1 then 1 ELSE NULL END) as "Accepted" 
from tb_a 

你可以看到输出该请求HERE

+0

这不会与OP要求的什么 –

+1

@JafarKofahi随时解释自己!在我看来,这正是他所爱的...... –

+0

在OP中他说:“注意:我不能添加一个围绕这个的总和。” –

4

关闭...尝试:

select 
    Sum(case when rsp_ind = 0 then 1 Else 0 End) as 'New', 
    Sum(case when rsp_ind = 1 then 1 else 0 end) as 'Accepted' 
from tb_a 
+0

这不会与什么OP要求 –

+0

OP说,这给了他两行而不是一个。 – ErikE

+0

错字 - 留下一个右括号。惊讶它甚至工作。 –

0
select sum(rsp_ind = 0) as `New`, 
     sum(rsp_ind = 1) as `Accepted` 
from tb_a 
+0

这不适用于SQL的所有变体...... – ErikE

+2

是的 - 它会在MySQL上工作。 –

+3

给出OP的一个重要细节并没有说明DBMS的用途。 – ErikE

2

你得到两行,而不是一个原因就是你在外部查询中分组为rsp_ind(您没有,让我失望,与我们分享)。没有任何事情可以强制一行而不是两行,而不处理该GROUP BY项目。