2017-03-05 3 views
0

Sie haben versucht, FactVisits zu füllen, und jede Hilfe wäre sehr willkommen. Ich muss auch ein Maß von dem, was ich sehen kann, werfen, aber die Arbeit mit zwei Datenbanken ist der schwierige Teil.Versucht, eine Faktentabelle aus zwei verschiedenen Datenbanken zu füllen

Zwei: PDF Links für Datenbanken: DWCorporateReports Database Patients Database

[code] 
INSERT INTO FactVisits 
( --VisitKey int PRIMARY KEY Not Null 
DateKey 
,ClinicKey 
,PatientKey 
,DoctorKey 
,ProcedureKey 
,Charge 
) 
SELECT fv.[DateKey] = dd.DateKey 
    ,ClinicKey = [DWCorporateReports].[dbo].[DimClinics].[ClinicKey] 
    ,PatientKey = [DWCorporateReports].[dbo].[DimPatients].[PatientKey] 
    ,DoctorKey = [DWCorporateReports].[dbo].[DimDoctors].[DoctorKey] 
    ,ProcedureKey = [DWCorporateReports].[dbo].[DimProcedure].[ProcedureKey] 
    ,CAST(pv.Charge AS decimal(18,4)) = dip.Charge 

--DimDates to  FactVisits. 
FROM [DWCorporateReports].[dbo].[DimDates] AS dd 
INNER JOIN [DWCorporateReports].[dbo].[FactVisits] AS fv 

ON fv.DateKey = dd.DateKey 

--DimClinics to FactVisits 
INNER JOIN [DWCorporateReports].[dbo].[DimClinics] AS dc 
ON fv.ClinicKey = dc.ClinicKey 

--DimPatients to FactVisits. 
INNER JOIN [DWCorporateReports].[dbo].[DimPatients] AS dp 
ON fv.PatientKey = dp.PatientKey 

--DimDoctors to FactVisits. 
INNER JOIN [DWCorporateReports].[dbo].[DimDoctors] AS did 
ON fv.DoctorKey = did.DoctorKey 

--DimProcedures to FactVisits. 
INNER JOIN [DWCorporateReports].[dbo].[DimProcedures] AS dip 
ON fv.ProcedureKey = dip.ProcedureKey 

--(OLTP) Patient database to (OLAP) DWCorporateReports Database. 
INNER JOIN [Patients].[dbo].[Visits] AS pv 
ON pv.ID = dip.ProcedureKey 

--Foreign Keys to FactVisits Table. 
ALTER TABLE FactVisits 
ADD CONSTRAINT fk_DimDates_DateKey 
FOREIGN KEY (DateKey) 
REFERENCES DimDates (DateKey) --Constraint in the FactVisits Table. 

ALTER TABLE FactVisits 
ADD CONSTRAINT fk_DimClinics_ClinicKey_ClinicKey 
FOREIGN KEY (ClinicKey) 
REFERENCES DimClinics (ClinicKey) --Constraint in the FactVisits Table. 

ALTER TABLE FactVisits 
ADD CONSTRAINT fk_DimPatients_PatientKey 
FOREIGN KEY (PatientKey) 
REFERENCES DimPatients (PatientKey) --Constraint in the FactVisits Table. 

ALTER TABLE FactVisits 
ADD CONSTRAINT fk_DimDoctors_DoctorKey_DoctorKey 
FOREIGN KEY (DoctorKey) 
REFERENCES DimDoctors (DoctorKey) --Constraint in the FactVisits Table. 

ALTER TABLE FactVisits 
ADD CONSTRAINT fk_DimProcedures_ProcedureKey 
FOREIGN KEY (ProcedureKey) 
REFERENCES DimProcedures (ProcedureKey) --Constraint in the FactVisits Table. 
[/code] 

Wenn jemand eine Idee hätte, wie diese Arbeit zu machen und mir Beispiele geben, ich so sehr geschätzt werden würde.

+0

1. Was ist das eigentliche Problem? Wenn du einen Fehler hast, poste es. Wenn deine Daten falsch sind, poste Beispiele; 2. Bitte geben Sie den RDBMS-Typ an. Ich nehme an, SQL Server aber welche Version? –

Antwort

0
[CODE] 
INSERT INTO FactVisits 
( --VisitKey int PRIMARY KEY Not Null 

    DateKey 
    ,ClinicKey 
    ,PatientKey 
    ,DoctorKey 
    ,ProcedureKey 
    ,Charge) 

SELECT dd.DateKey 
     ,dc.ClinicKey --[DWCorporateReports].[dbo].[DimClinics].[ClinicKey] 
     ,dp.PatientKey --[DWCorporateReports].[dbo].[DimPatients].[PatientKey] 
     ,doc.DoctorKey--[DWCorporateReports].[dbo].[DimDoctors].[DoctorKey] 
     ,dpro.ProcedureKey --[DWCorporateReports].[dbo].[DimProcedure].[ProcedureKey] 
     ,v.Charge --[Patients].[dbo].[Visits] 
FROM [Patients].[dbo].[Visits] AS v 
     INNER JOIN [DWCorporateReports].[dbo].[DimDates] AS dd 
      ON CAST(v.[Date] AS date) = CAST(dd.FullDate AS date) 

     INNER JOIN [DWCorporateReports].[dbo].[DimClinics] AS dc 
      ON SUBSTRING(CAST(v.Clinic AS VARCHAR(3)), 1, 1)= dc.ClinicID 

     INNER JOIN [DWCorporateReports].[dbo].[DimPatients] AS dp 
      ON v.Patient = dp.PatientID 

     INNER JOIN [DWCorporateReports].[dbo].[DimDoctors] AS doc 
      ON ISNULL(v.Doctor,-1) = doc.DoctorID 

     INNER JOIN [DWCorporateReports].[dbo].[DimProcedures] AS dPro 
      ON v.[Procedure] = dpro.ProcedureID 
WHERE Doctor IS NOT NULL 

UNION ALL 

SELECT dd.DateKey 
     ,dc.ClinicKey  --[DWCorporateReports].[dbo].[DimClinics].[ClinicKey] 
     ,dp.PatientKey  --[DWCorporateReports].[dbo].[DimPatients].[PatientKey] 
     ,-1 AS DoctorKey --[DWCorporateReports].[dbo].[DimDoctors].[DoctorKey] 
     ,dpro.ProcedureKey --[DWCorporateReports].[dbo].[DimProcedure].[ProcedureKey] 
     ,v.Charge --[Patients].[dbo].[Visits] 
FROM [Patients].[dbo].[Visits] AS v 
     INNER JOIN [DWCorporateReports].[dbo].[DimDates] AS dd 
      ON CAST(v.[Date] AS date) = CAST(dd.FullDate AS date) 

     INNER JOIN [DWCorporateReports].[dbo].[DimClinics] AS dc 
      ON SUBSTRING(CAST(v.Clinic AS VARCHAR(3)), 1, 1)= dc.ClinicID 

     INNER JOIN [DWCorporateReports].[dbo].[DimPatients] AS dp 
      ON v.Patient = dp.PatientID  

     INNER JOIN [DWCorporateReports].[dbo].[DimProcedures] AS dPro 
      ON v.[Procedure] = dpro.ProcedureID 
WHERE v.Doctor IS NULL 

[/CODE] 
Verwandte Themen