Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Antoliv

Como mostrar a quantidade de arquivos repetidos e criar uma nova Colun

Recommended Posts

Saguinte,

no banco cadastro alguns erros. E depois quero mostrá-los separadamento.

Ex:

 

Estrutura do Banco:

 

LOCAL Erros

barra erro 1

barra av; erro 1

Caxias erro 2

Leblon erro 3

ipanema erro 4

 

 

 

Só que na hora do select, o ideia é que saísse assim:

 

LOCAL erros 1 erro2 erro3 erro4

barra 2 1 4 1

barra av; 2 1 4 1

Caxias 2 1 4 1

Leblon 2 1 4 1

ipanema 2 1 4 1

 

Esse numeros acima são a quantidade de erros de acordo com o que fora cadastrado pelo usuario.

 

Ex:

 

na primeira linha, temos:

 

LOCAL erros 1 erro2 erro3 erro4

barra 2 1 4 1

 

onde na barra, quantidade de erro1 forma2, de erro 2 foi 1 e assim sucessivamente.

 

 

bom, tentei exemplicar... deixar a explicação o mais simples possível.

 

Agora, vou postar um exemplo real de onde consegui chegar, de acordo com o pouco que conheço.

 

 

 

SELECT motivo_resultado, count(motivo_resultado) AS folha FROM tb_resultado_pistolagem
WHERE motivo_resultado='erro1'
GROUP BY motivo_resultado
Alguém poderia dá uma forcinha..? Tentei um SELECT duplo, mas não funcionou.

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O SUM utilizao, qué para realizar operação de adição, certo?

Group By utilizo também, só que tem alguma coisa que não está dando certo.

CASE não sei como fazer isso. Na verdade não cheguei a utilizá-lo.

 

Mas vou vê-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Montei algo do tipo:

 

SELECT
nome_marca_resultado,
COUNT(CASE WHEN (nome_marca_resultado='Outras Despesas') THEN 1 ELSE 0 END) AS'Folha de Outras Despesas',
COUNT(CASE WHEN (nome_marca_resultado='não Preenchida' AND nome_marca_resultado=1) THEN 1 ELSE 0 END) AS 'Guia não Preenchida'
FROM
tb_resultado
GROUP BY
nome_marca_resultado
**************************************************************************************************
Estou vendo esse CASE e o PIVOT agora. Portanto, estou estudando-os ainda.
Consegui mostrar uma parte.
Mas por exemplo, quando quero mostrar "Não Preenchida", repete a primeira coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizei este site para compreender melhor:

 

http://stackoverflow.com/questions/1241178/mysql-rows-to-columns

 

Só que não entendi uma coisa. Como mostrar os dados de que preciso em coluna.

 

Tipo, no banco a gente salva e fica assim assim:

 

BAIRROS ERROS

Bairro botafogo Não preenchido

Bairro caxias Sem Guia

Bairro flamengo Não preenchido

A ideia é fazer uma contagem dos erros e nomear as colunas de acordo com o "erro" aprensetando, portanto como no exemplo baixo:

 

 

BAIRROS Não preenchido Sem Guia

Bairro botafogo 1

Bairro caxias 1 1

Bairro flamengo 1

 

Eu tinha conseguindo assim:

 

SELECT resultado, count(resultado) AS folha FROM tb_resultado
WHERE motivo_resultado='Outras Despesas'
GROUP BY resultado

 

 

Ainda não consegui preender bem o CASE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, utilizei este codigo:

 

SELECT nome_resultado,
CASE WHEN mot_resultado = 'Outras Despesas' THEN motivo_resultado ELSE 0 END AS 'Outras Despesas',
CASE WHEN mot_resultado = 'não Preenchida' THEN motivo_resultado ELSE 0 END AS 'Não Preenchida',
CASE WHEN mot_resultado = 'Etiqueta' THEN motivo_resultado ELSE 0 END AS 'Etiqueta'
FROM tb_resultado
parece que agora funcionou um parte. Para "fechar", tentei utilizar o COUNT. Porém ao utilizá-lo, as colunas se repetem quando tento agrupar pelo bairro.
Tentando explicar de uma maneira mais clara, existem erros que se repetem para uma mesma unidade.
Ex:

BAIRROS ERROS

Bairro botafogo Não preenchido

Bairro botafogo Não preenchido

Bairro botafogo Não preenchido

Bairro botafogo Não preenchido

Estou tentando agrurpar pelo campo "BAIRROS" para que o resultado fico como abaixo:

BAIRROS Não preenchido

Bairro botafogo 4

 

 

Porém quando insiro o COUNT, o resultado é assim:

 

BAIRROS Não preenchido Não preenchido

Bairro botafogo 4 4

 

Como estou tentando fazer com que apareçam dois campos, o campo 1 se reflete ao campo 2.

 

 

Conseguiu compreender(rs)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nome_resultado,

SUM(CASE WHEN mot_resultado = 'Outras Despesas' THEN motivo_resultado ELSE 0 END) AS 'Outras Despesas',

SUM(CASE WHEN mot_resultado = 'não Preenchida' THEN motivo_resultado ELSE 0 END) AS 'Não Preenchida',

SUM(CASE WHEN mot_resultado = 'Etiqueta' THEN motivo_resultado ELSE 0 END) AS 'Etiqueta'

FROM tb_resultado

GROUP BY NOME_RESULTADO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa|!

Vlw pela dica.

Bom, seguinte, quando utilizo o código que vc postou acima, os resultados aparecem zerados.

Mas quandno eu tiro o SUM e insiro o COUNT, aparece o total do bairro daquele bairro.

Vide o código:

 

SELECT nome_resultado,
CASE WHEN motivo_resultado = 'Outras Despesas' THEN count(motivo_resultado) ELSE 0 END AS 'Outras Despesas',
CASE WHEN motivo_resultado = 'nao Preenchida' THEN count(motivo_resultado) ELSE 0 END AS 'nao Preenchida',
CASE WHEN motivo_resultado = 'Etiqueta' THEN count(motivo_resultado) ELSE 0 END AS 'Etiqueta'
FROM tb_resultado
GROUP BY nome_resultado
Consegui fazer da maneira acima. Só que o ruim é que aparece o total do total.
Por exemplo:
se existem 5 erros de um mesmo bairro. 3 erros são de "não preenchidas"; 2 erros são de "rasuradas". Totalizando, portando, 4.
O interessante é mostrar 2 de cada.

BAIRROS Não preenchido Rasuradas

Bairro botafogo 3 2

 

Só que mostra assim:

 

BAIRROS Não preenchido Rasuradas

Bairro botafogo 5 0

Acredito que agora é uma questão de detalhe que não estou conseguindo enxergar.

Sinceramente, agora a mente deu uma "parada"...rsrs tentando pensar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pega o

SELECT nome_resultado,
CASE WHEN motivo_resultado = 'Outras Despesas' THEN count(motivo_resultado) ELSE 0 END AS 'Outras Despesas',
CASE WHEN motivo_resultado = 'nao Preenchida' THEN count(motivo_resultado) ELSE 0 END AS 'nao Preenchida',
CASE WHEN motivo_resultado = 'Etiqueta' THEN count(motivo_resultado) ELSE 0 END AS 'Etiqueta'
FROM tb_resultado
GROUP BY nome_resultado

trasforma em subquery e retira o que vc nao quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites
giesta,

agradeço pelo contato.

 

Tranformar em subquery quer dizer criar um outro SELECT ??

 

Seriam 2 (dois) SELECTs?

 

Outra: nao entendi muito "retira o que você nao quer". Sendo que, na verdade, preciso acrescentar mais informação.

 

 

Tendeu......?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe Carlos, entendi errado seu post.

 

Verifique o primeiro link que o Motta colocou. La tem 2 exemplos funcionais.

 

De qualquer maneira, vc sempre vai ter q usar o sum , se vc usar o count, ele "ativa a regra" e conta todas as linhas para a regra. Idealmente mesmo é marretar 1 e 0 e depois dar sum

 

Mais info:

 

http://stackoverflow.com/questions/5045124/count-case-and-when-statement-in-mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

giesta, agradeço pelo feedback.

 

Quando utilizo o SUM, os valores aparecem zerados em todas as colunas.

 

Não estendi muito (rs) tua frase: " Idealmente mesmo é marretar 1 e 0".

Entendo o básico do básico de banco de dados.

 

Já estou olhando o link que você postou. Só não entendo porque o sum aparece com valor zerado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao Carlos, se você tem linhas e quer transformar em campos, ou seja uma consulta pivot, você pode marretar, e ao marretar você entende bem melhor o q esta fazendo e o que esta acontecenco.

 

ou seja

select local,
if( erros = erro1,1,0) as erro1,
if( erros = erro2,1,0) as erro2,
if( erros = erro3,1,0) as erro3,
if( erros = erro4,1,0) as erro4 
from tabela

desta maneira você processou o campo "erros" 4 vezes e o transformou com 4 campos distintos, que só retorna "1" quando a linha possui o valor correto para o campo "erros" e zero quando possui valor distinto.

 

Esse é o primeiro passo.

 

Se você para aqui você tem o seguinte conjunto de dados partindo do exemplo incial

LOCAL-Erro1-Erro2-Erro3-Erro4
barra-1-0-0-0
barra av-1-0-0-0
Caxias-0-1-0-0
Leblon-0-0-1-0
ipanema-0-0-0-1

depois você pode pegar esse conjunto de dados e tratar com uma tabela, ou seja subquery. ou pode plicar funcoes de agregacao nesse conjunto de dados

select local, 
sum(erro1) as total_erro1, 
sum(erro2) as total_erro2
sum(erro3) as total_erro3
sum(erro4) as total_erro4
from 
(
select local,
if( erros = erro1,1,0) as erro1,
if( erros = erro2,1,0) as erro2,
if( erros = erro3,1,0) as erro3,
if( erros = erro4,1,0) as erro4
from tabela
) as z
group by local

o mesmo pode ser feito diretamente com case em apenas um passo, mas é necessário ter mais cuidado

Compartilhar este post


Link para o post
Compartilhar em outros sites

giesta, vlw pela "Aula"...rsrs
Vou tentar aplicar esse teu ensino ao que estou tentando desenvolver. Acho q tua explicação ficou bem clara.

Assim que eu obtiver algum resultado, seja ele positivo ou negativo(acredito positivo), voltarei aqui para postar.

 

No mais..

agradeço bastante pela atenção.

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estudei o teu código.

Tentei aplicar, mas os valores aparecem zerados.

Veja como ficou:

 

 

SELECT nome_marca_resultado,
sum('Folha de Outras Despesas') as erro1,
sum('Guia não Preenchida') as erro2
FROM
(
SELECT nome_marca_resultado,
if (motivo_resultado = 'Folha de Outras Despesas', 1,0 ) as erro1,
if (motivo_resultado = 'Guia não Preenchida', 1, 0) as erro2
FROM tb_resultado_pistolagem
) as z
GROUP BY nome_marca_resultado
******************************************************************************************
OBS: quando utilizo o COUNT ele exibe valores.. mas esses valores são os totais, como vc explicara no post anterior.
Já com o SUM, nada aparede; tudo zero (0);
também tentei utilizar este cóigo:
SELECT nome_marca_resultado,
CASE WHEN motivo_resultado = 'Folha de Outras Despesas' THEN count(motivo_resultado) ELSE 0 END AS 'Folha de Outras Despesas',
CASE WHEN motivo_resultado = 'Guia não Preenchida' THEN count(motivo_resultado) ELSE 0 END AS 'Guia não Preenchida'
FROM tb_resultado_pistolagem
GROUP BY nome_marca_resultado
Mas ele não exibe todos os valores. Estou quebrando a cabeça nisso já tem quase dois dias...rs

Imprimi até o teu código pra estudá-lo melhor..
Se com esses códigos dos quais postei, tu pouder me ajudar ainda...
showww!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E para melhor compreensão, utilizo este código com o SUM:

 

SELECT nome_marca_resultado,
CASE WHEN motivo_resultado = 'Folha de Outras Despesas' THEN SUM(motivo_resultado) ELSE 0 END AS 'Folha de Outras Despesas',
CASE WHEN motivo_resultado = 'Guia não Preenchida' THEN SUM(motivo_resultado) ELSE 0 END AS 'Guia não Preenchida'
FROM tb_resultado_pistolagem
GROUP BY nome_marca_resultado
Porém os valores aparecem com valor ZERO (0).

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vc nomeou os campos como erro1 e erro2, logo eles devem participar do sum.




SELECT nome_marca_resultado,
sum(erro1) as erro1,
sum(erro2) as erro2
FROM
(
SELECT nome_marca_resultado,
if (motivo_resultado = 'Folha de Outras Despesas', 1,0 ) as erro1,
if (motivo_resultado = 'Guia não Preenchida', 1, 0) as erro2
FROM tb_resultado_pistolagem
) as z
GROUP BY nome_marca_resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.