Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Pessoal, em primeiro lugar agradecer pela ajuda em algumas dificuldades em algumas querys.
Tenho um relatório que eu gostaria de saber a presença e dever de casa de cada usuário em determinadas semanas.
Atualmente está assim minha query:
usuario | semana | presença | Dever de casa
João | semana 1 | 0 | 1
João | semana 2 | 1 | 0
João | semana 3 | 1 | 0
João | semana 4 | 0 | 1
João | semana 5 | 1 | 1
Maria | semana 1 | 0 | 0
Maria | semana 2 | 1 | 1
Maria | semana 3 | 0 | 0
Maria | semana 4 | 1 | 1
Maria | semana 5 | 0 | 1
Gostaria que ficasse assim:
usuário | semana 1 | semana 2 | semana 3 | semana 4 | semana 5 | Dever de casa 1 | Dever de casa 2 ...
joão | 0 | 1 | 1 | 0 | 1 | 1 | 0 ...
Maria | 0 | 1 | 0 | 1 | 0 | 0 | 1 ...
Estou tentando usar o group_concat mas não estou conseguindo, mas também não sei se é a melhor opção!
>
20 horas atrás, Motta disse:
pesquise por pivot no mysql
Pesquisei e estou tendo uma dificuldade para montar esse SQL.
Na minha tabela são 3 campos: presença, mda e a semana. Sendo que o último não seria uma data e sim um número inteiro, por ex Semana=1,2,3..52. E gostaria de mostrar as semanas escolhidas no campo e o tipo e mda nos registros.
Escolhi o case:
SELECT
(case when semana = '1' then tipo else 0 end)As Semana 1,
(case when semana = '1' then mda else 0 end)As Semana 1,
(case when semana = '2' then tipo else 0 end)As Semana 2,
(case when semana = '2' then mda else 0 end)As Semana 2,
...
(case when semana = '52' then tipo else 0 end)As Semana 52,
(case when semana = '52' then mda else 0 end)As Semana 52,
from frequencia
Seria mais ou menos isso?Sim é uma agrigadora do tipo max ou sum conforme o tipo da coluna , algo assim
SELECT usuario
max (case when semana = '1' then tipo else null end)As Semana 1,
sum(case when semana = '1' then mda else 0 end)As Semana 1,
max (case when semana = '2' then tipo else null end)As Semana 2,
sum (case when semana = '2' then mda else 0 end)As Semana 2,
...
max (case when semana = '52' then tipo else null end)As Semana 52,
sum(case when semana = '52' then mda else 0 end)As Semana 52,
from frequencia
group by usuario>
16 horas atrás, Motta disse:
Sim é uma agrigadora do tipo max ou sum conforme o tipo da coluna , algo assim
SELECT usuario
max (case when semana = '1' then tipo else null end)As Semana 1,
sum(case when semana = '1' then mda else 0 end)As Semana 1,
max (case when semana = '2' then tipo else null end)As Semana 2,
sum (case when semana = '2' then mda else 0 end)As Semana 2,
...
max (case when semana = '52' then tipo else null end)As Semana 52,
sum(case when semana = '52' then mda else 0 end)As Semana 52,
from frequencia
group by usuario
Motta Bom dia!!!
coloquei das diversas formas:
SELECT `membros_idmembros`
max (case when semana = '34' then tipo else null end)As Semana 34,
max (case when semana = '34' then mda else null end)As Semana 34,
from frequencia
group by `membros_idmembros`
_________________________________________________________________________
coloquei das diversas formas:
SELECT `membros_idmembros`
sum(case when semana = '34' then tipo else 0 end)As Semana 34,
sum(case when semana = '34' then mda else 0 end)As Semana 34,
from frequencia
group by `membros_idmembros`
_______________________________________________________________
Aparece a mensagem de erro:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `membros_idmembros`
sum(case when semana = '34' then tipo else 0 en' at line 2
Obs: Os campos tipo e mda recebem somente 2 valores 0 ou 1.Pode ser que a síntaxe do CASE no Mysql seja diferente , fiz para Oracle, cheque o manual.
>
12 minutos atrás, Motta disse:
Pode ser que a síntaxe do CASE no Mysql seja diferente , fiz para Oracle, cheque o manual.
Estranho que cheguei a fazer outra query e foi:
SUM(CASE WHEN t2.tipo = 1 AND TIMESTAMPDIFF(YEAR, t1.dataNascimento, CURDATE())>=13 ) AS presencas_adultos
SUM(CASE WHEN t2.tipo = 1 AND TIMESTAMPDIFF(YEAR, t1.dataNascimento, CURDATE())<13 THEN 1 ELSE 0 END) AS
pesquise por pivot no mysql