2013-07-31 26 views
19

私はテーブルを持っており、次のように出力する必要があります。 '受理'case文でsql countを使用する

出力としてrsp_ind = '新' のように0と1を持つ行の

tb_a: 

col1 | reg_id | rsp_ind 

Countは、私は次のクエリを使用してみました

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 

として出力を取得mの誰かが、出力を達成するために、クエリを微調整する私に助けてもらえます。 注:これを取り囲む合計を追加することはできません。大きなプログラムのその部分と私はこれにスーパークエリを追加することはできません。

+0

合計を追加することはできませんが、クエリを変更することはできますか?これをサブクエリにしますか? –

+0

case文の代わりにサブクエリを追加できます。しかし、これ以上のスーパークエリ... サブクエリを追加すると、明らかにパフォーマンスヒットが発生します。 – Raghav

+2

私は、おそらくあなたのインラインサブクエリを作る代わりにこのサブクエリをあなたのjoin句に追加することができます。 URコード? –

答えて

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は、これが彼に1つではなく2つの行を与えると言う。 – ErikE

+0

typoのみ - 閉じたかっこを1つ省略します。それは驚いた。 –

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

を使用すると、2つの列の代わりに1を取得している理由はあなたということです外側のクエリ(私の失望、私たちと共有していない)でrsp_indでグループ化されています。そのGROUP BYアイテムを扱わずに2つではなく1つの行を強制することはできません。