Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tentando fazer uma consulta que me traga a quantidade de registros de uma tabela separados por cada item do ENUM.
TABELA: tbl_solicitacoes
Gostaria que me trouxesse o resultado assim:
Pendetes | 9
Cancelados | 34
Em Análise | 7
Atendido | 67
Finalizando | 0
Tentei o seguinte:
SELECT COUNT(*), bool_status FROM tbl_solicitacoes GROUP BY bool_status
Mas isso me retorna apenas os campos que tem algum registro, mas preciso que retorne os que não tem com valor zero.
Tentei utilizar o CASE mas deu errado também:
SELECT bool_status,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Pendente' THEN COUNT() ELSE 0 END AS PENDENTES,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Em Análise' THEN COUNT() ELSE 0 END AS ANÁLISE,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Atendimento em 45 dias' THEN COUNT() ELSE 0 END AS 45_DIAS,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Atendimento em 60 dias' THEN COUNT() ELSE 0 END AS 60_DIAS,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Cancelado' THEN COUNT() ELSE 0 END AS CANCELADO,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Correção' THEN COUNT() ELSE 0 END AS CORREÇÃO,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Finalizando' THEN COUNT() ELSE 0 END AS FINALIZANDO,
CASE WHEN COUNT() IS NOT NULL AND bool_status = 'Atendido' THEN COUNT() ELSE 0 END AS ATENDIDO
FROM tbl_solicitacoes
Consegui da seguinte forma:
SELECT
SUM( bool_status = 'Pendente' ) AS Pendente,
SUM( bool_status = 'Em Análise' ) AS 'Em Análise',
SUM( bool_status = 'Atendimento em 45 dias' ) AS 'Atendimento em 45 dias',
SUM( bool_status = 'Atendimento em 60 dias' ) AS 'Atendimento em 60 dias',
SUM( bool_status = 'Cancelado' ) AS Cancelado,
SUM( bool_status = 'Atendido' ) AS Atendido,
SUM( bool_status = 'Correção' ) AS Correção,
SUM( bool_status = 'Finalizando' ) AS Finalizando
FROM tbl_solicitacoes
SELECT bool_status,
Sum(CASE WHEN bool_status = 'Pendente' THEN 1 ELSE 0 END AS PENDENTES,
...
Sum(CASE WHEN bool_status = 'Atendido' THEN 1 ELSE 0 END AS ATENDIDO,
Sum(CASE WHEN bool_status is null THEN 1 ELSE 0 END AS nulos
FROM tbl_solicitacoes
group by bool_status
Mas isto só faz sentido se bool_status for um código, sendo já uma descrição ...
SELECT bool_status,count(*) qtd
FROM tbl_solicitacoes
group by bool_status
Case + group by