Fórum Pessoal, como posso fazer 2 SELECT no SQL sendo que vai ter dois COUNT separando o resultado em duas colunas? #592823
28/04/2018
0
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
Curtir tópico
+ 0Post mais votado
28/04/2018
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.NomeJerson Boer
Gostei + 3
Mais Posts
30/04/2018
Novato
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
30/04/2018
Jerson Boer
<td>" . $row['QtdeOutros'] . "</td> <td>" . $row['QtdePrivado'] . "</td> Mude para: <td>" . $row['Outros'] . "</td> <td>" . $row['Privado'] . "</td>
Gostei + 1
30/04/2018
Novato
Gostei + 0
30/04/2018
Jerson Boer
Gostei + 0
30/04/2018
Jerson Boer
TRANSFORM Count(production.[Código]) AS ContarDeCódigo SELECT production.[Nome] FROM production GROUP BY production.[Nome] PIVOT production.[Segmento];
Gostei + 2
30/04/2018
Leandro Sousa
<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
02/05/2018
Novato
Gostei + 0
02/05/2018
Novato
Não apresenta nenhum resultado
versão do access 2002 e 2003
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:
<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
08/05/2018
Novato
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
Clique aqui para fazer login e interagir na Comunidade :)