usar a contagem de sql numa instrução de caso

Tenho uma tabela e preciso de apresentar a produção da seguinte forma.

tb_a:

col1  |  reg_id | rsp_ind 

Número de linhas com rsp_ind = 0 Como "novo" e 1 Como "aceite"

a saída deve ser

NEW | Accepted
9   | 10

tentei usar a seguinte consulta.

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

e estou a obter a saída como

NEW | Accepted
NULL| 10
9   | NULL
Alguém pode ajudar-me a ajustar a consulta para conseguir a saída. Nota: não posso adicionar uma soma em torno disto. É parte de um programa maior e por isso não posso adicionar uma super-consulta para presente.

 26
sql
Author: Raghav, 2013-07-31

5 answers

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

Você pode ver o resultado deste pedido aqui

 74
Author: Billy McNuggets, 2013-07-31 16:16:45
Quase... tente:
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
 7
Author: Charles Bretana, 2013-07-31 17:48:35

A razão pela qual você está recebendo duas linhas em vez de uma é que você está agrupando por {[[0]} na consulta externa (que você não compartilhou, para minha decepção, conosco). Não há nada que você possa fazer para forçar uma linha em vez de duas sem lidar com esse item GROUP BY.

 2
Author: ErikE, 2013-08-01 05:52:06

Dependendo de seu sabor de SQL, você também pode implicar a outra declaração {[[14]} em suas contagens agregadas.

Por exemplo, aqui está uma tabela simples.Grades:
| Letters |
|---------|
| A       |
| A       |
| B       |
| C       |
Podemos testar cada sintaxe agregada do contador assim.( demonstração interactiva no violino SQL):
SELECT
    COUNT(CASE WHEN Letter = 'A' THEN 1 END)           AS [Count - End],
    COUNT(CASE WHEN Letter = 'A' THEN 1 ELSE NULL END) AS [Count - Else Null],
    COUNT(CASE WHEN Letter = 'A' THEN 1 ELSE 0 END)    AS [Count - Else Zero],
    SUM(CASE WHEN Letter = 'A' THEN 1 END)             AS [Sum - End],
    SUM(CASE WHEN Letter = 'A' THEN 1 ELSE NULL END)   AS [Sum - Else Null],
    SUM(CASE WHEN Letter = 'A' THEN 1 ELSE 0 END)      AS [Sum - Else Zero]
FROM Grades

E aqui estão os resultados (univoted para leitura):

|    Description    | Counts |
|-------------------|--------|
| Count - End       |    2   |
| Count - Else Null |    2   |
| Count - Else Zero |    4   | *Note: Will include count of zero values
| Sum - End         |    2   |
| Sum - Else Null   |    2   |
| Sum - Else Zero   |    2   |

Que se alinha com os documentos para funções agregadas em SQL

Docs for COUNT:

COUNT(*) - devolve o número de itens de um grupo. Isto inclui valores nulos e duplicados.
COUNT(ALL expression) - avalia a expressão para cada linha de um grupo e devolve o número de valores nonnull.
COUNT(DISTINCT expression) - avalia a expressão para cada linha de um grupo e devolve o número de valores únicos e não completos.

Docs for SUM:

ALL - aplica o agregado função a todos os valores. Tudo é o padrão.
DISTINCT - Especifica que a soma devolve a soma de valores únicos.

 2
Author: KyleMit, 2018-08-30 20:54:41
select sum(rsp_ind = 0) as `New`,
       sum(rsp_ind = 1) as `Accepted` 
from tb_a
 0
Author: juergen d, 2013-07-31 16:02:26