You are on page 1of 9

SANCHEZ VALVERDE CRISTIAN HUMBERTO

--creacion de base de datos dimensional

create database BD_CONSULTAS_DW

go

use BD_CONSULTAS_DW

go

--creacion dimensiones

--dimpaciente

create table dimPACIENTE(

keypaciente integer identity(1,1) not null primary key,

Nombres varchar(30) null,

Apellidos varchar(30) null,

Sexo char(1) null,

Direccion varchar(60) null,

IdDistrito int not null,

NombreDistrito varchar(60) null,

IdPaciente int not null

go

alter table dimPACIENTE

add NombreDistrito varchar(60)

create table dimMEDICO(

keymedico integer identity(1,1) not null primary key,

Nombres varchar(30) null,

Apellidos varchar(30) null,


IdTipoEspecialidad int not null,

IdMedico int not null

go

alter table dimMEDICO

add DescripcionEspecialidad varchar(40)

create table dimTIEMPO

keyTiempo integer identity(1,1) not null primary key,

Año char(04) not null,

Mes char(12) not null,

Bimestre char(1) not null,

--Dias integer not null,

idFecha char(10) not null

go

--alter table dimTIEMPO

--drop column Dias

create table dimMEDICINA

keymedicina integer identity(1,1) not null primary key,

Nombre varchar(100) null,

stock decimal(8,2) null,

UnidadMedida varchar(25),

FechaVencimientoMedicina datetime not null,


FechaRecetaMedicina datetime not null,

IdMedicina int not null

go

create table hechoCONSULTA(

keypaciente integer not null foreign key (keypaciente) references


dimPACIENTE(keypaciente),

keymedico integer not null foreign key (keymedico) references


dimMEDICO(keymedico),

keyTiempo integer not null foreign key (keyTiempo) references


dimTIEMPO(keyTiempo),

keymedicina integer not null foreign key (keymedicina) references


dimMEDICINA(keymedicina),

TipoDeConsultorio varchar(12) null,

constraint PK_primaria

primary key(keypaciente, keymedico, keyTiempo,keymedicina)

Go
--POBLAMIENTO

use BDCONSULTAS

go

--use BD_CONSULTAS_DW

--go

--select *from BD_CONSULTAS_DW.dbo.dimPACIENTE

--go

MERGE BD_CONSULTAS_DW.dbo.dimPACIENTE as dim

USING(

SELECT P.nombre as Nombres,

P.Apellido as Apellidos,

P.Sexo as Sexo,

P.Direccion as Direccion,

D.IdDistrito as NumeroDistrito,

D.Nombre as NombreDistrito,

P.IdPaciente as IdPaciente

FROM PACIENTE P

INNER JOIN DISTRITO D

ON D.IdDistrito= P.IdDistrito

inner join PACIENTES_ATENDIDOS PA

on PA.IdPaciente=P.IdPaciente

) AS oltp

on oltp.IdPaciente=dim.IdPaciente

WHEN NOT MATCHED THEN

INSERT VALUES(Nombres, Apellidos, Sexo, Direccion,NumeroDistrito ,IdPaciente,


NombreDistrito);

--Poblamiento dimMEDICINA
MERGE BD_CONSULTAS_DW.dbo.dimMEDICINA as dim

USING(

SELECT

M.Nombre as Nombre,

M.stock as stock,

M.UnidadMedida as Medida,

L.FechaExpiracion as FechaVencimiento,

R.FechaAtencion as FechaRecetaMedicina,

M.IdMedicina as IdMedicina

FROM MEDICINA M

inner join LOTE_MEDICINA LM

on LM.IdMedicina= M.IdMedicina

inner join LOTE L

on L.IdLote=LM.IdLote

inner join DETALLE_RECETA DT

ON M.IdMedicina=DT.IdMedicina

inner join RECETA R

ON R.IdReceta=DT.IdReceta

) AS oltp

on oltp.IdMedicina=dim.IdMedicina

WHEN NOT MATCHED THEN

INSERT VALUES(Nombre, stock, Medida,


FechaVencimiento,FechaRecetaMedicina,IdMedicina);

--poblamiento dimTIEMPO

MERGE BD_CONSULTAS_DW.dbo.dimTIEMPO as dim

USING(
SELECT

Año=year(C.Fecha),

Mes = datename(mm,C.Fecha),

Bimestre = CASE

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 1 AND 2 THEN '1'

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 3 AND 4 THEN '2'

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 5 AND 6 THEN '3'

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 7 AND 8 THEN '4'

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 9 AND 10 THEN '5'

WHEN DATEPART (MONTH, C.Fecha) BETWEEN 11 AND 12 THEN '6'

END,

idFecha=convert(char(10), C.Fecha, 103)

FROM CONSULTA C

) AS oltp

on oltp.idFecha=dim.idFecha

WHEN NOT MATCHED THEN

INSERT VALUES(Año,Mes, Bimestre, idFecha);

--Poblamiento dimMEDICO

MERGE BD_CONSULTAS_DW.dbo.dimMEDICO as dim

USING(

SELECT M.Nombre as Nombres,

M.Apellido as Apellidos,

M.IdTipoEspecialidad as NumeroEspecialidad,

TE.Descripcion as DescripcionEspecialidad,

M.IdMedico as IdMedico

from MEDICO M
inner join TIPO_ESPECIALIDAD TE

on TE.IdTipoEspecialidad= M.IdTipoEspecialidad

AS oltp

on oltp.IdMedico=dim.IdMedico

WHEN NOT MATCHED THEN

INSERT VALUES(Nombres,Apellidos, NumeroEspecialidad,


IdMedico,DescripcionEspecialidad);

--POBLAMIENTO hechoCONSULTA

MERGE BD_CONSULTAS_DW.dbo.hechoCONSULTA as dim

USING(

SELECT

keypaciente = dp.keypaciente,

keyTiempo = dt.keyTiempo,

keyMedico=dme.keymedico,

keyMedicina=dm.keymedicina,

TipoDeConsultorio=E.Descripcion

from BD_CONSULTAS_DW.dbo.dimPACIENTE dp

inner join PACIENTE P

on P.IdPaciente=dp.IdPaciente

inner join PACIENTES_ATENDIDOS PA

on PA.IdPaciente=P.IdPaciente

inner join CONSULTA C

on C.IdConsulta=PA.IdConsulta

inner join BD_CONSULTAS_DW.dbo.dimTIEMPO dt


on dt.idFecha = convert(char(10), C.fecha, 103)

inner join BD_CONSULTAS_DW.dbo.dimMEDICO dme

on dme.IdMedico=C.IdMedico

inner join RECETA R

ON R.IdConsulta=PA.IdConsulta

inner join DETALLE_RECETA DR

on DR.IdReceta=R.IdReceta

inner join MEDICINA M

on M.IdMedicina=DR.IdMedicina

inner join BD_CONSULTAS_DW.dbo.dimMEDICINA dm

on dm.IdMedicina=M.IdMedicina

inner join CONSULTORIO CONS

on CONS.IdConsultorio=C.IdConsultorio

inner join ESTADO E

ON E.TipoEstado=CONS.TipoEstado

group by dp.keypaciente, dt.keyTiempo,


dm.keymedicina,dme.keymedico,E.Descripcion

) AS oltp

on oltp.keypaciente = dim.keypaciente

and oltp.keyTiempo = dim.keyTiempo

and oltp.keyMedicina = dim.keyMedicina

and oltp.keyMedico=dim.keyMedico

WHEN NOT MATCHED THEN

INSERT VALUES(keypaciente, keyMedico,keyTiempo, keyMedicina, TipoDeConsultorio);

You might also like