Fórum Trazer dados em colunas #464775

23/12/2013

0

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);
Lucas Burg

Lucas Burg

Responder

Posts

23/12/2013

Alex Lekao

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
Responder

Gostei + 0

23/12/2013

Lucas Burg

Obrigado pela dica Alex - Lekao vou pesquisar valeu !
Responder

Gostei + 0

23/12/2013

Alex Lekao

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
Responder

Gostei + 0

26/12/2013

Lucas Burg

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
Responder

Gostei + 0

26/12/2013

Alex Lekao

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.
Responder

Gostei + 0

26/12/2013

Lucas Burg

Boa tarde preciso que não traga os nulls

Responder

Gostei + 0

26/12/2013

Alex Lekao

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.
Responder

Gostei + 0

26/12/2013

Alex Lekao

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.

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.
Responder

Gostei + 0

26/12/2013

Alex Lekao

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.
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.
Responder

Gostei + 0

26/12/2013

Lucas Burg

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
Responder

Gostei + 0

26/12/2013

Alex Lekao

blz...

desculpe nao ajudar melhor, eu nao manjo tao bem assim de mysql...

manjo quase nada de SQL Server... rsr as mysql.. nadinha... rrsr
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar