Ir para conteúdo

POWERED BY:

Arquivado

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

Ilano

Organizar dados de uma tabela em outra

Recommended Posts

Olá pessoal,

 

Uso o SQL Server 2005 e tenho quatro tabelas:

 

TB_Cursos

Cur_Codigo

Cur_Nome

 

TB_Disciplinas

Dis_Codigo

Dis_Nome

 

TB_Grade

Gra_Codigo

Gra_Sigla

Gra_Semestre

Cur_Codigo

Dis_Codigo

...

 

TB_PreRequisitos

PR_Codigo

Gra_Codigo

 

O meu problema é o seguinte: Preciso gerar um relatório onde eu possa mostrar uma matriz curricular da seguinte forma:

 

Nome do Curso | Sigla | Nome da Disciplina | Semestre | Pré-Requisitos

 

Só q os Pré-Requisitos vêem de outra tabela (TB_PreRequisitos) e deverão todos estar em uma só linha, para cada disciplina, claro, pois estão vinculados.

 

Sei q para criar o SQL das 3 primeiras tabelas, é simples, só usar o INNER JOIN, mas, como faço para incluir nesse script a quarta tabela (TB_PreRequisitos) de forma a organizar os dados corretamente?

 

Grato,

 

Ilano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá jus2ka,

 

Minha consulta ficou assim:

 

SELECT G.Gra_Codigo, G.Gra_Sigla, G.Gra_Ano, G.Cur_Codigo,

G.Gra_Teoria, G.Gra_Pratica, G.Gra_Creditos, G.Gra_CargaHoraria,

G.Sem_Codigo, C.Cur_Sigla, C.Cur_Nome, D.Dis_Nome, P.Dis_Codigo

FROM TB_Grade G

INNER JOIN TB_Cursos C ON (G.Cur_Codigo = C.Cur_Codigo)

INNER JOIN TB_Disciplinas D ON (G.Dis_Codigo = D.Dis_Codigo)

INNER JOIN TB_Semestres S ON (G.Sem_Codigo = S.Sem_Codigo)

INNER JOIN TB_PreRequisitos P ON (G.Gra_Codigo = P.Gra_Codigo)

GROUP BY G.Gra_Codigo, G.Gra_Sigla, G.Gra_Ano, G.Cur_Codigo,

G.Gra_Teoria, G.Gra_Pratica, G.Gra_Creditos, G.Gra_CargaHoraria,

G.Sem_Codigo, C.Cur_Sigla, C.Cur_Nome, D.Dis_Nome, P.Dis_Codigo

Mas veja nesta imagem, como estão reotrnando os dados e como preciso q retornem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não faz nenhum sentido você usar o group by, pois não está usando nenhuma função.

não consigo visualizar a imagem, mas imagino como é que esteja sendo o resultado.

 

o que me vem a cabeça agora, é você criar uma procedure

dentro dela cria um cursor com o mesmo select que está usando (mas sem o group by)

cria um while e vai concatenado a variável pre-requisito.

 

while cursor

pre-requisito := pre-requisito + cursor.pre_requisito;

end while

insert into tmp_tabela (....) values (cd_curso, cd_disciplina, cd_grade, pre-requisito)

 

claro que não vai ser tão simples assim, pois você vai sempre ter que incluir na tabela temporária quando mudar a disciplina, curso ou grade.

 

depois faz uma consulta normal nessa tabela e dá um drop nessa tabela.

 

Entendeu??

 

 

 

 

 

 

EDITANDO.....

achei esse tópico, que deve ser o que você quer e precisa

tópico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na imagem você traz os dois ultimos campos e um unico campo.

Se você estiver usando sql2005, você pode usar a funcao PIVOT TABLE, que transforma essas linhas em coluna.

Se for sql2000 o trampo eh um pouco maior, no caso vai ter q fazer subselect, ou ateh msm substring.

 

Qual sql você esta usando?

 

Abçs

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.