Ir para conteúdo

POWERED BY:

Arquivado

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

Felipe Thais

select

Recommended Posts

Boa noite galera, estou necessitando de uma ajuda. Estou fazendo um projeto para treinar banco de dados em casa e estou com uma dificuldade:

 

Tenho duas tabelas (Cargo_Formacoes) e (Colaboradores formacoes), em ambas as tabelas possuem dados de como seguem

 

-----------------------------

(Cargo_formacoes) |

----------------------------|

id_cargo_formacoes |

id_cargo | -> Nesta tabela de Cargo_formacao estao a graducao, especialidade e curso desejado para o colaborar pode atuar no cargo

graduacao |

especialidade |

curso |

----------------------------

 

 

_______________________

Colaboradores Formacoes |

-------------------------------------

id_colaboradores Formacao |

id_colaborador | -> Nesta tabela estão as graduações, especializacoes e cursos que um colaborartem

graduacao |

Especialidade |

curso |

-------------------------------------

 

 

Com estes dados em mãos preciso de um select que verifique se o colaborador pode atuar no cargo fiz algo aqui mais não foi :

 

ALTER PROCEDURE [dbo].[uspConsultaCargoFormacaoColaborador]

@id_cadastro_cargos int

AS

BEGIN

 

SELECT

cf.matricula,

col.nome_colaborador,

COL.data_admissao

 

FROM

Colaborador_Formacaoes cf,

Colaborador col

 

WHERE

cf.matricula = col.matricula AND

cf.graduacao = (SELECT c.graduacao FROM Cargo_Formacoes C WHERE C.id_cadastroCargo = @id_cadastro_cargos) END

cf.especializacao = (SELECT c.especializacao FROM Cargo_Formacoes C WHERE C.id_cadastroCargo = @id_cadastro_cargos) END

cf.curso = (SELECT c.Curso FROM Cargo_Formacoes C WHERE C.id_cadastroCargo = @id_cadastro_cargos) END

 

 

 

END

 

 

 

Alguém pode me ajudar como faço isto:: Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Felipe,

 

Com estas informações que você colocou eu tentei simular um cenário parecido com o seu.

 

Primeiro criei as tabelas, como você não colocou a estrutura completa eu criei da seguinte maneira:

CREATE TABLE [dbo].[Colaborador](
	[id] [int] NULL,
	[matricula] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[nome_colaborador] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[data_admissao] [datetime] NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Colaboradores_formacoes](
	[id_colaborador_formacao] [int] NULL,
	[id_colaborador] [int] NULL,
	[graduacao] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[especialidade] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[curso] [varchar](50) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Cargo_Formacoes](
	[id_cargo_formacoes] [int] NULL,
	[id_cargo] [int] NULL,
	[graduacao] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[especialidade] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
	[curso] [varchar](50) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]

Só não criei a tabela de CARGOS, não achei necessário para o retorno que você precisa.

 

Em seguida inseri alguns dados aleatórios para poder gerar resultado:

insert into Colaborador (id,matricula,nome_colaborador,data_admissao) values (1,'1111','Fulano 1','20140101')
insert into Colaborador (id,matricula,nome_colaborador,data_admissao) values (3,'3333','Siclano 3','20140101')
insert into Colaborador (id,matricula,nome_colaborador,data_admissao) values (5,'5555','Beltrano 5','20140101')
insert into Colaborador (id,matricula,nome_colaborador,data_admissao) values (7,'7777','Silva 7','20140101')

insert into Colaboradores_Formacoes (id_colaborador_formacao,id_colaborador,graduacao,especialidade,curso) values (1,1,'Tecnico','ORACLE','ORACLE')
insert into Colaboradores_Formacoes (id_colaborador_formacao,id_colaborador,graduacao,especialidade,curso) values (2,1,'Tecnico','C#','C#')
insert into Colaboradores_Formacoes (id_colaborador_formacao,id_colaborador,graduacao,especialidade,curso) values (3,1,'Tecnico','PHP','PHP')
insert into Colaboradores_Formacoes (id_colaborador_formacao,id_colaborador,graduacao,especialidade,curso) values (4,1,'Superior','MySQL','MySQL')
insert into Colaboradores_Formacoes (id_colaborador_formacao,id_colaborador,graduacao,especialidade,curso) values (5,1,'Superior','SQL SERVER','SQL SERVER')

insert into Cargo_Formacoes (id_cargo_formacoes,id_cargo,graduacao,especialidade,curso) values (1,2,'Tecnico','C#','C#')
insert into Cargo_Formacoes (id_cargo_formacoes,id_cargo,graduacao,especialidade,curso) values (2,3,'Tecnico','.NET','.NET')
insert into Cargo_Formacoes (id_cargo_formacoes,id_cargo,graduacao,especialidade,curso) values (3,4,'Superior','SQL SERVER','SQL SERVER')
insert into Cargo_Formacoes (id_cargo_formacoes,id_cargo,graduacao,especialidade,curso) values (4,5,'Superior','ORACLE','ORACLE')

Pelo que eu entendi você precisa saber dentre os colaboradores cadastrados qual deles pode atuar nos cargos que a empresa esta disponibilizando correto?

 

Então:

select distinct		C.matricula,
					C.nome_colaborador,
					C.data_admissao,
					CoF.graduacao as Graduacao_Colaborador,
					CoF.especialidade as Especialidade_Colaborador, 
					CoF.curso as Curso_Colaborador,
					CaF.id_cargo, 
					CaF.graduacao as Graduacao_Exigida, 
					CaF.Especialidade as Especialidade_Exigida, 
					CaF.curso as Curso_Exigido
		from Colaborador C
			inner join Colaboradores_Formacoes CoF on CoF.id_colaborador = C.id
			inner join Cargo_Formacoes CaF on CaF.Graduacao = CoF.Graduacao
		where CoF.Especialidade = CaF.Especialidade
			and CoF.Curso = CaF.Curso

Neste cenário somente dos colaboradores aparecerão no resultado, pois eles são os únicos que tem qualificações necessárias para atuar nos cargos disponíveis: Siclano 3 e Silva 7.

 

Para você ver realmente se o Select esta funcionando altere o curso exigido para especialidade SQL SERVER na tabela Cargo_Formacoes para 'Microsoft'.

update Cargo_Formacoes set curso = 'Microsoft' where id_cargo_formacoes = 3

Rode novamente o Select, você vera que agora somente o Siclano 3 atende aos requisitos dos cargos disponíveis.

 

É isso que você precisa??

 

Grande abraço!

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.