Trazer dados em colunas
Boa Tarde pessoal
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);
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
Curtidas 0
Respostas
Alex Lekao
23/12/2013
Ola Burg, boa tarde!!!
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
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
Lucas Burg
23/12/2013
Obrigado pela dica Alex - Lekao vou pesquisar valeu !
GOSTEI 0
Alex Lekao
23/12/2013
Blz....
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
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
Lucas Burg
23/12/2013
Bom dia pessoal
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
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
Alex Lekao
23/12/2013
Ola Burg, boa tarde!!!
VC nao quer que traga as linhas com null? ou vc quer que nao apareca null, seja paresentado outra informacao? vazio por exemplo.
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
Lucas Burg
23/12/2013
Boa tarde preciso que não traga os nulls
GOSTEI 0
Alex Lekao
23/12/2013
blz.
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.
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
Alex Lekao
23/12/2013
Ola Burg,
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.
segue seu codigo com o ifnull.
veja se eh isso mesmo que vc queria.
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
Alex Lekao
23/12/2013
Ola Burg,
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.
qqr coisa a gente ve o que consegue.
abraco.
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
Lucas Burg
23/12/2013
Muito obrigado !!!
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
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
Alex Lekao
23/12/2013
blz...
desculpe nao ajudar melhor, eu nao manjo tao bem assim de mysql...
manjo quase nada de SQL Server... rsr as mysql.. nadinha... rrsr
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