Fórum Trazer dados em colunas #464775
23/12/2013
0
Estou com problemas para faze um exercício do curso
A situação e a seguinte, tenho que trazer as informações iguais a do exemplo boletim
Agradeço desde ja.
exemplo boletim
NOME DISCIPLINA BIMESTRE1 BIMESTRE2 BIMESTRE3 BIMESTRE4
MARIA NUNES PORTUGUES 8.0 7.8 3.4 5.2
MARIA NUNES MATEMÁTICA 6.3 8.0 6.5 6.3
MARIA NUNES HISTÓRIA 7.1 7.3 8.6 7.4
MARIA NUNES GEOGRAFIA 2.5 6.8 8.7 6.5
JOAO SILVA PORTUGUES 5.0 7.7 2.5 6.6
JOAO SILVA MATEMÁTICA 8.3 8.6 5.9 7.0
JOAO SILVA HISTÓRIA 7.1 7.3 7.5 8.0
JOAO SILVA GEOGRAFIA 5.5 6.6 9.8 7.9
Esse são as tabelas:
CREATE TABLE aluno(
cod_aluno integer not null auto_increment,
nome_aluno varchar(30) not null,
sexo char(1) not null,
constraint pk_cod_aluno
primary key(cod_aluno)
);
CREATE TABLE disciplina(
cod_disciplina integer not null,
nome_disciplina varchar(15) not null,
constraint pk_disciplina
primary key(cod_disciplina)
);
CREATE TABLE nota_bimestral(
cod_aluno integer not null,
cod_disciplina integer not null,
bimestre int(1) not null,
nota decimal(2,1) not null,
constraint pk_nota
primary key(cod_aluno,cod_disciplina,bimestre),
constraint fk_cod_aluno
foreign key(cod_aluno)
references aluno(cod_aluno),
constraint fk_cod_disciplina
foreign key(cod_disciplina)
references disciplina(cod_disciplina)
);
os insert :
Insert into aluno(nome_aluno,sexo)
VALUES
("MARIA NUNES","F"),
("JOAO SILVA","M");
insert into disciplina(cod_disciplina,nome_disciplina)
VALUES
(1,"PORTUGUES"),
(2,"MATEMATICA"),
(3,"HISTORIA"),
(4,"GEOGRAFIA");
insert into nota_bimestral(cod_aluno,cod_disciplina,bimestre,nota)
VALUES
(1,1,1,8.0),
(1,1,2,7.8),
(1,1,3,3.4),
(1,1,4,5.2),
(1,2,1,6.3),
(1,2,2,8.0),
(1,2,3,6.5),
(1,2,4,6.3),
(1,3,1,7.1),
(1,3,2,7.3),
(1,3,3,8.6),
(1,3,4,7.4),
(1,4,1,2.5),
(1,4,2,6.8),
(1,4,3,8.7),
(1,4,4,6.5),
(2,1,1,5.0),
(2,1,2,7.7),
(2,1,3,2.5),
(2,1,4,6.6),
(2,2,1,8.3),
(2,2,2,8.6),
(2,2,3,5.9),
(2,2,4,7.0),
(2,3,1,7.1),
(2,3,2,7.3),
(2,3,3,7.5),
(2,3,4,8.0),
(2,4,1,5.5),
(2,4,2,6.6),
(2,4,3,9.8),
(2,4,4,7.9);
Lucas Burg
Curtir tópico
+ 0Posts
23/12/2013
Alex Lekao
Vc tera que usar PIvot, acho que tem em mysql, vou postar uns links abaixo, de uma olhada se te ajuda.
[url]http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf[/url]
[url]http://www.codeproject.com/Articles/363339/Cross-Tabulation-Pivot-Tables-with-MySQL[/url]
[url]http://stackoverflow.com/questions/15510657/pivot-table-using-mysql[/url]
[url]http://forums.mysql.com/read.php?20,530270[/url]
Espero que ajude.
Abraco.
Alex - Lekao
Gostei + 0
23/12/2013
Lucas Burg
Gostei + 0
23/12/2013
Alex Lekao
ja abri e fechei minha vm umas 3 vezes para tentar testar o que vc precisa no mysql que tenho na vm para testar e nao consegui fazer aind... muita correria... rsrsr
mas da uma olhada se te ajuda e posta ai o resultado que conseguiu.
Abraco.
Alex - Lekao
Gostei + 0
26/12/2013
Lucas Burg
Consegui trazer os dados mais não estou conseguindo eliminar os nulls,
Alex - Lekao se puder me ajudar agradeço desde já .
Esse e o script que traz as informações com os nulls.
select
a.nome_aluno,
d.nome_disciplina,
case when n.bimestre = 1 then nota end as bimestre1,
case when n.bimestre = 2 then nota end as bimestre2,
case when n.bimestre = 3 then nota end as bimestre3,
case when n.bimestre = 4 then nota end as bimestre4
from nota_bimestral as n
inner join aluno as a on a.cod_aluno = n.cod_aluno
inner join disciplina as d on d.cod_disciplina = n.cod_disciplina
Abraço
Gostei + 0
26/12/2013
Alex Lekao
VC nao quer que traga as linhas com null? ou vc quer que nao apareca null, seja paresentado outra informacao? vazio por exemplo.
Gostei + 0
26/12/2013
Lucas Burg
Gostei + 0
26/12/2013
Alex Lekao
teria como vc colar uma imagem de como ficou ou o resultado para ficar melhor de analisar.
mas possivelmente seria apenas colocar um where.
ai vc colocar where campo is not null, acredito que ja resolva.
Gostei + 0
26/12/2013
Alex Lekao
entao eu peguei os seus scripts e criei as tabelas em um banco aqui e testei seu script.
vc precisa que os bimestres que nao tenham valor aparecam zero, correto?
vc pode usar o comando ifnull.
isnull(campo,valor_a_substituir)
segue seu codigo com o ifnull.
select a.nome_aluno, d.nome_disciplina, ifnull(case when n.bimestre = 1 then nota end,0) as bimestre1, ifnull(case when n.bimestre = 2 then nota end,0) as bimestre2, ifnull(case when n.bimestre = 3 then nota end,0) as bimestre3, ifnull(case when n.bimestre = 4 then nota end,0) as bimestre4 from nota_bimestral as n inner join aluno as a on a.cod_aluno = n.cod_aluno inner join disciplina as d on d.cod_disciplina = n.cod_disciplina
veja se eh isso mesmo que vc queria.
Gostei + 0
26/12/2013
Alex Lekao
fiz um ajuste, acho que gambiarra mesmo, pq nao manjo muito de mysql, no sql server, que to mais habituado, isso eh bem mais simples e menos trabalhoso.
use esse codigo que acredito que de o resultado que vc esta querendo.
select a.nome_aluno, d.nome_disciplina, sum(ifnull(case when n.bimestre = 1 then nota end,0)) as bimestre1, sum(ifnull(case when n.bimestre = 2 then nota end,0)) as bimestre2, sum(ifnull(case when n.bimestre = 3 then nota end,0)) as bimestre3, sum(ifnull(case when n.bimestre = 4 then nota end,0)) as bimestre4 from nota_bimestral as n inner join aluno as a on a.cod_aluno = n.cod_aluno inner join disciplina as d on d.cod_disciplina = n.cod_disciplina group by a.nome_aluno,d.nome_disciplina
qqr coisa a gente ve o que consegue.
abraco.
Gostei + 0
26/12/2013
Lucas Burg
consegui com esse query
select
a.nome_aluno,
d.nome_disciplina,
sum(ifnull(case when n.bimestre = 1 then nota end,0)) as bimestre1,
sum(ifnull(case when n.bimestre = 2 then nota end,0)) as bimestre2,
sum(ifnull(case when n.bimestre = 3 then nota end,0)) as bimestre3,
sum(ifnull(case when n.bimestre = 4 then nota end,0)) as bimestre4
from nota_bimestral as n
inner join aluno as a on a.cod_aluno = n.cod_aluno
inner join disciplina as d on d.cod_disciplina = n.cod_disciplina
group by a.nome_aluno desc,d.nome_disciplina desc;
Abraço
Gostei + 0
26/12/2013
Alex Lekao
desculpe nao ajudar melhor, eu nao manjo tao bem assim de mysql...
manjo quase nada de SQL Server... rsr as mysql.. nadinha... rrsr
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)