2013-07-31 71 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項目。