Pessoal, como posso fazer 2 SELECT no SQL sendo que vai ter dois COUNT separando o resultado em duas colunas?
Sendo que na tabela tem os seguintes dados:
Nome | Segmento |
Pedro | Privado |
Maria | Privado |
João | Outros |
Maria | Outros |
João | Outros |
João | Outros |
Maria | Privado |
Pedro | Outros |
Pedro | Outros |
Desejo que fiquem dessa forma após fazer a consulta do sql:
Nome | qtd1 | qtd2 |
Pedro | 1 | 2 |
Maria | 2 | 1 |
João | 0 | 3 |
No SQL fiz da seguinte forma porém não deu certo, alguém pode me ajudar a corrigir ou da opiniões de como fazer?
Nome | Segmento |
Pedro | Privado |
Maria | Privado |
João | Outros |
Maria | Outros |
João | Outros |
João | Outros |
Maria | Privado |
Pedro | Outros |
Pedro | Outros |
Desejo que fiquem dessa forma após fazer a consulta do sql:
Nome | qtd1 | qtd2 |
Pedro | 1 | 2 |
Maria | 2 | 1 |
João | 0 | 3 |
No SQL fiz da seguinte forma porém não deu certo, alguém pode me ajudar a corrigir ou da opiniões de como fazer?
sql = "SELECT Nome, COUNT(Segmento) AS qtd1 FROM production WHERE [Segmento] = Privado GROUP BY Nome UNION ALL SELECT Nome, COUNT(Segmento) AS qtd2 FROM production WHERE [Segmento] = Outros GROUP BY Nome";
Novato
Curtidas 0
Melhor post
Jerson Boer
28/04/2018
Olá Novato, veja se atende ao que precisa:
SELECT DISTINCT
production.Nome, CASE WHEN ContaSegmentoOutros.QtdeOutros IS NULL THEN 0 ELSE ContaSegmentoOutros.QtdeOutros END AS Outros,
CASE WHEN ContaSegmentoPrivado.QtdePrivado IS NULL THEN 0 ELSE ContaSegmentoPrivado.QtdePrivado END AS Privado
FROM production LEFT OUTER JOIN
(SELECT Nome, Segmento, COUNT(Segmento) AS QtdeOutros
FROM production
WHERE (Segmento = 'Outros')
GROUP BY Nome, Segmento) AS ContaSegmentoOutros ON ContaSegmentoOutros.Nome = production.Nome LEFT OUTER JOIN
(SELECT Nome, Segmento, COUNT(Segmento) AS QtdePrivado
FROM production
WHERE (Segmento = 'Privado')
GROUP BY Nome, Segmento) AS ContaSegmentoPrivado ON ContaSegmentoPrivado.Nome = production.NomeGOSTEI 3
Mais Respostas
Novato
28/04/2018
Olá Jerson, não funcionou! Para conhecimentos a todos eu estou buscando as informações do banco de dados access e jogando em uma página PHP.
Aqui está o código completo:
Esse outro código funciona porém não atende a minha necessidade pois na tabela apresenta somente a quantidade do Segmento "Outros" de cada Nome e desejo mais uma coluna com a quantidade do Segmento "Privado".
Tabela que aparece no PHP:
Nome | qtd |
Pedro | 1 |
Maria | 2 |
João | 0 |
Tabela que desejo:
Nome | qtd1 | qtd2 |
Pedro | 1 | 2 |
Maria | 2 | 1 |
João | 0 | 3 |
Obs: Se conseguirem mudando completamente sql que funcione pode mandar que aceito.
Aqui está o código completo:
$sql = "SELECT DISTINCT
production.Nome, CASE WHEN ContaSegmentoOutros.QtdeOutros IS NULL THEN 0 ELSE ContaSegmentoOutros.QtdeOutros END AS Outros,
CASE WHEN ContaSegmentoPrivado.QtdePrivado IS NULL THEN 0 ELSE ContaSegmentoPrivado.QtdePrivado END AS Privado
FROM production LEFT OUTER JOIN
(SELECT Nome, Segmento, COUNT(Segmento) AS QtdeOutros
FROM production
WHERE (Segmento = 'Outros')
GROUP BY Nome, Segmento) AS ContaSegmentoOutros ON ContaSegmentoOutros.Nome = production.Nome LEFT OUTER JOIN
(SELECT Nome, Segmento, COUNT(Segmento) AS QtdePrivado
FROM production
WHERE (Segmento = 'Privado')
GROUP BY Nome, Segmento) AS ContaSegmentoPrivado ON ContaSegmentoPrivado.Nome = production.Nome";
$result = $conexao->query($sql);
while ($row = $result->fetch()){
echo "<tr><td>" . $row['Nome'] . "</td>
<td>" . $row['QtdeOutros'] . "</td>
<td>" . $row['QtdePrivado'] . "</td>
<td>" . "Abril" . "</td></tr></span>";
}
Esse outro código funciona porém não atende a minha necessidade pois na tabela apresenta somente a quantidade do Segmento "Outros" de cada Nome e desejo mais uma coluna com a quantidade do Segmento "Privado".
$sql = "SELECT Nome, COUNT(Segmento) AS qtd FROM production WHERE [Segmento] = 'Outros' GROUP BY Nome";
$result = $conexao->query($sql);
while ($row = $result->fetch()){
echo "<tr><td>". $row['Nome'] . "</td>
<td>" . $row['qtd'] . "</tr></span>";
}
echo "</table>";
?>
Tabela que aparece no PHP:
Nome | qtd |
Pedro | 1 |
Maria | 2 |
João | 0 |
Tabela que desejo:
Nome | qtd1 | qtd2 |
Pedro | 1 | 2 |
Maria | 2 | 1 |
João | 0 | 3 |
Obs: Se conseguirem mudando completamente sql que funcione pode mandar que aceito.
GOSTEI 0
Jerson Boer
28/04/2018
Veja se não é aqui o problema, os nomes do campo na consulta e o nome que está buscando a linha estão diferentes:
<td>" . $row['QtdeOutros'] . "</td> <td>" . $row['QtdePrivado'] . "</td> Mude para: <td>" . $row['Outros'] . "</td> <td>" . $row['Privado'] . "</td>
GOSTEI 1
Novato
28/04/2018
Não, tentei mudando esse campo para diversas situações porém não teve êxito.
GOSTEI 0
Jerson Boer
28/04/2018
Não apresenta resultado nenhum? Dá algum erro? Você tentou rodar essa consulta direta em banco?
GOSTEI 0
Jerson Boer
28/04/2018
Qual a versão do seu Access? Veja se essa funciona:
TRANSFORM Count(production.[Código]) AS ContarDeCódigo SELECT production.[Nome] FROM production GROUP BY production.[Nome] PIVOT production.[Segmento];
GOSTEI 2
Leandro Sousa
28/04/2018
Tenta fazer o select assim:<br />
<br />
select<br />
usu.Id_Usuario<br />
, usu.Nm_Usuario<br />
, count(distinct grp.Id_Grupo) as Qtde_Grupo<br />
, count(distinct per.Id_Perfil) as Qtde_Motivo<br />
from <br />
Usuario usu with(nolock)<br />
left join Grupo grp with(nolock) on grp.Id_Usuario = usu.Id_Usuario<br />
left join Perfil per with(nolock) on per.Id_Usuario = usu.Id_Usuario<br />
group by usu.Nm_Usuario,usu.Id_Usuario
<br />
select<br />
usu.Id_Usuario<br />
, usu.Nm_Usuario<br />
, count(distinct grp.Id_Grupo) as Qtde_Grupo<br />
, count(distinct per.Id_Perfil) as Qtde_Motivo<br />
from <br />
Usuario usu with(nolock)<br />
left join Grupo grp with(nolock) on grp.Id_Usuario = usu.Id_Usuario<br />
left join Perfil per with(nolock) on per.Id_Usuario = usu.Id_Usuario<br />
group by usu.Nm_Usuario,usu.Id_Usuario
GOSTEI 0
Novato
28/04/2018
Muito obrigado pelas respostas porém não foi solucionado o meu problema.
GOSTEI 0
Novato
28/04/2018
Não funcionou
Não apresenta nenhum resultado
versão do access 2002 e 2003
Não entendi esse sql:
Não apresenta nenhum resultado
versão do access 2002 e 2003
Qual a versão do seu Access? Veja se essa funciona:
TRANSFORM Count(production.[Código]) AS ContarDeCódigo SELECT production.[Nome] FROM production GROUP BY production.[Nome] PIVOT production.[Segmento];
Não entendi esse sql:
Tenta fazer o select assim:
<br /> <br /> select<br /> usu.Id_Usuario<br /> , usu.Nm_Usuario<br /> , count(distinct grp.Id_Grupo) as Qtde_Grupo<br /> , count(distinct per.Id_Perfil) as Qtde_Motivo<br /> from <br /> Usuario usu with(nolock)<br /> left join Grupo grp with(nolock) on grp.Id_Usuario = usu.Id_Usuario<br /> left join Perfil per with(nolock) on per.Id_Usuario = usu.Id_Usuario<br /> group by usu.Nm_Usuario,usu.Id_Usuario
GOSTEI 0
Novato
28/04/2018
Pessoal, com ajuda de vocês consegui da seguinte forma:
Os resultados estão exibindo corretamente, porém com sinal de menos ao lado (-) e acrescentando ".0" em todos os resultados. Como faço para corrigir?
Está exibindo dessa forma:
Nome | Outros | Privado |
--------------------------
João | -3.0 | -0.0 |
Maria | -1.0 | -2.0 |
Pedro | -2.0 | -1.0 |
Os resultados estão exibindo corretamente, porém com sinal de menos ao lado (-) e acrescentando ".0" em todos os resultados. Como faço para corrigir?
$sql = "SELECT Nome, SUM([Segmento] = 'Privado') AS qtd, SUM([Segmento] = 'Outros') AS qtd2 FROM tb_nova_production GROUP BY Nome";
$result = $conexao->query($sql);
while ($row = $result->fetch()){
echo "<tr><td>" . $row[''Nome''] . "</td>
<td>" . $row[''qtd''] . "</td>
<td>" . $row[''qtd2''] . "</td></tr></span>";
}
Está exibindo dessa forma:
Nome | Outros | Privado |
--------------------------
João | -3.0 | -0.0 |
Maria | -1.0 | -2.0 |
Pedro | -2.0 | -1.0 |
GOSTEI 0