Boa tarde!
Tenho uma tabela com 150 linhas, e em 17 delas, a coluna “nm_equipe” contém o valor “DD”.
Preciso executar uma query que retorne tanto a quantidade de linhas que contem o valor DD, quanto a quantidade das que não tem. Como posso fazer isso em uma mesma query?
A query pra retornar apenas as 17 linhas mencionadas ficou assim:
Retorno:
Quantidade
17 | TC.DD.3
Gostaria de obter um retorno desse:
Quantidade
17 | TC.DD.3
133 | qualquer outro nome
Preciso disso para gerar um gráfico com base no resultset, estou quebrando a cabeça aki, agradeço se alguem puder ajudar 
Consegui algo perto do que eu quero, pena que saiu na mesma linha 
SELECT SUM(CASE
WHEN nm_equipe LIKE '%DD%' THEN 1
ELSE 0
END) AS DD,
SUM(CASE
WHEN nm_equipe LIKE '%DD%' THEN 0
ELSE 1
END) AS DC
FROM tb_servico_saida;
Creio que precisará usar subselects aí, hein?
poderia me dar um exemplo velho?
SELECT
(SELECT count(*) FROM tb_tua_tabela
WHERE
nm_equipe = 'DD') as qt_com_dd,
(SELECT count(*) FROM tb_tua_tabela
WHERE
nm_equipe <> 'DD') as qt_sem_dd
FROM
tb_tua_tabela
Lembrando que isto não é performático, mas deve resolver.
Se trabalhar no case que estava montando, talvez seja mais elegante.
Rodei seu código aki (com as adaptações necessárias) e ainda não rolou.
sem GROUP BY ele imprimiu algo como:
17,133
17,133
…
17,133
e com o GROUP BY ele imprimiu o mesmo que minha query com o SUM.
Vou tentar implementar isso no gráfico de qualquer forma, e ver como fica, até pq digamos que eu não domine seu comportamento em relação ao resultset ~~
obrigado pela ajuda cara!
edit: não ficou legal, realmente preciso que as quantidades sejam impressas uma embaixo da outra, ou seja, em um mesmo “field”.
Sim, eu postei apenas parte da solução.
Se não me engano, você precisa colocar todos os elementos da consulta no group by, caso contrário ele pode “ignorar” algumas coisas.
Pensei em duas possibilidades:
- Utilizar um union
select 'dd' tipo, count(*) qtd from tabela where campo like '%dd%'
union all
select 'não--dd' as tipo, count(*) from tabela where campo not like '%dd%'
Esse not like é péssimo pra performance (na verdade, tanto quanto o like em si), mas para pequenos volumes é aceitável.
- “Criar” uma coluna a mais com o tipo da coluna (aquele dd ou não-dd da primeira query) e agrupoar por ela
select tipo, count(*) qtd
from
(
select case when campo like '%dd%' then 'dd' else 'não-dd' end tipo from tabela
)
[quote=AbelBueno]Pensei em duas possibilidades:
- Utilizar um union
select 'dd' tipo, count(*) qtd from tabela where campo like '%dd%'
union all
select 'não--dd' as tipo, count(*) from tabela where campo not like '%dd%'
Esse not like é péssimo pra performance (na verdade, tanto quanto o like em si), mas para pequenos volumes é aceitável.
- “Criar” uma coluna a mais com o tipo da coluna (aquele dd ou não-dd da primeira query) e agrupoar por ela
select tipo, count(*) qtd
from
(
select case when campo like '%dd%' then 'dd' else 'não-dd' end tipo from tabela
)
[/quote]
Mas, precisa mesmo ser LIKE? Se os campos que quer somar são sempre ‘DD’, faça com = mesmo (não é java, logo o operador = vai servir para comparar valores).
[quote=drsmachado]
Mas, precisa mesmo ser LIKE? Se os campos que quer somar são sempre ‘DD’, faça com = mesmo.[/quote]
Na verdade, eu só mantive a regra que ele colocou na primeira query dele.
Funcionaria com qualquer expressão.
[quote=AbelBueno][quote=drsmachado]
Mas, precisa mesmo ser LIKE? Se os campos que quer somar são sempre ‘DD’, faça com = mesmo.[/quote]
Na verdade, eu só mantive a regra que ele colocou na primeira query dele.
Funcionaria com qualquer expressão.[/quote]
Entendi.
De qualquer forma, ao autor do tópico, fica a dica aí.
Já tinha fechado tudo pra ir embora quando dei o último F5 no forum, e vi as respostas, abri tudo dinovo pra testar haha.
O código acima resolveu meu problema, agora só basta eu configurar essas queries no programa, colocar pra rodar e cruzar os dedos 
AbelBueno e drsmachado, me digam onde vcs moram pra eu pagar uma cerveja pra vcs, haha.
Abraços, segunda-feira dou o feedback quanto ao gráfico, mas quanto a query retornar no mesmo field, funcionou perfeitamente 
só uma observação, o like %dd% não é performático, mas o like dd% é. E inclusive o like dd% pode usar índice (se você definir), mas a melhor opção ainda seria a igualdade (sem substring)
Coloquei a query no iReport utilizando o union all e funcionou exatamente como eu queria, muito obrigado mais uma vez 
Quanto ao LIKE vs operador de igualdade, é bom saber quanto a performance, porém na atual situação do meu BD, não existe um padrão para os nomes, o nome de uma equipe pode estar tanto no meio, no fim, ou até mesmo no começo, portanto tenho que usar o %x% (os dados que recebemos são externos, mas keremos padronizar).
Vou lembrar dessa dica qdo adotarmos um padrão, e dar uma revisada em muitas queries aki.
Agradeço a ajuda de todos.
Abraços,
Bruno