2014-05-19 5 views
0

Пожалуйста, обратите внимание на следующее:SQL самостоятельно сервер реферирование запрос

CREATE DATABASE TEST 
USE TEST 

CREATE TABLE Student 
    (
     StudentID INT IDENTITY 
        PRIMARY KEY , 
     FirstName NVARCHAR(50) , 
     LastName NVARCHAR(50) 
    ) 

CREATE TABLE StudentComponent 
    (
     StudentComponentID INT IDENTITY 
          PRIMARY KEY , 
     StudentID INT FOREIGN KEY REFERENCES dbo.Student(StudentID) , 
     ComponentName NVARCHAR(50) , 
     ComponentRef NVARCHAR(50) , 
     ComponentType NCHAR(2) 
    ) 

CREATE TABLE Component 
    (
     ComponentID INT IDENTITY 
         PRIMARY KEY , 
     StudentComponentID INT FOREIGN KEY REFERENCES dbo.StudentComponent(StudentComponentID) , 
     ComponentName NVARCHAR(50) , 
     ComponentRef NVARCHAR(50) , 
     ComponentType NCHAR(2) 
    ) 

У меня есть 3 таблицы

  1. Student
  2. StudentComponent
  3. Компонент

выделена в размерах

CREATE TABLE DimClass 
    (ClassDwKey INT, 
    ClassName NVARCHAR(50), 
    ClassRef NVARCHAR(50)) 

    CREATE TABLE DimCollege 
    (CollegeDwKey INT, 
    CollegeName NVARCHAR(50), 
    CollegeRef NVARCHAR(50)) 

    CREATE TABLE DimSubject 
    (SubjectDwKey INT, 
    SubjectName NVARCHAR(50), 
    SubjectRef NVARCHAR(50)) 

    CREATE TABLE DimStudent 
    (StudentDwKey INT, 
    StudentName NVARCHAR(50)) 

    INSERT INTO 

    CREATE TABLE FactAcademicEvent 
    (StudentDwKey int, ClassDwKey int, CollegeDwKey int, SubjectDwKey INT) 

С отношением в том же порядке между ними (Student -> StudentComponent -> Component). Я разделил компоненты на свои собственные размеры, DimClass, DimCollege, DimSubject (split по полю componenttype, = 'CL' для класса, 'SU' для темы, 'CO' для колледжа и т. Д. Я пытаюсь загрузить таблицу фактов получая мои суррогатные ключи из моих измерений и производя ряд со следующими

StudentDwKey (от dimstudent), ClassDwKey, CollegeDwKey, SubjectDwKey. Существует связь между размерами и таблицей компонентов ComponentKey, которая ссылается на ученика через таблицу студенческих компонентов .

StudentComponent и компонентов в основном те же, за исключением StudentComponent ссылки студентов поэтому имеет больше строк.

Любые идеи?

+0

так ComponentName и исх равна Classname, classref, collegename, collegeref и т.д. – jhowe

ответ

1

EDIT:

Полное изменение на основе правок и комментариев OP в.

SELECT 
    s.StudentID, 
    MAX(dim_s.StudentDwKey) AS StudentDwKey, 
    MAX(dim_cl.ClassDwKey ) AS ClassDwKey, 
    MAX(dim_su.SubjectDwKey) AS SubjectDwKey, 
    MAX(dim_co.CollegeDwKey) AS CollegeDwKey 
FROM 
    Student   AS s 
LEFT JOIN 
    StudentComponent AS sc 
    ON sc.StudentID = s.StudentID 
LEFT JOIN 
    dimStudent   AS dim_s 
    ON dim_s.StudentName = s.StudentName -- or whatever is a reliable join 
LEFT JOIN 
    dimClass   AS dim_cl 
    ON dim_cl.ClassRef = sc.ComponentRef 
    AND sc.ComponentType = 'CL' 
LEFT JOIN 
    dimSubject   AS dim_su 
    ON dim_su.SubjectRef = sc.ComponentRef 
    AND su.ComponentType = 'SU' 
LEFT JOIN 
    dimCollege   AS dim_co 
    ON dim_co.CollegeRef = sc.ComponentRef 
    AND sc.ComponentType = 'CO' 
GROUP BY 
    s.StudentID 
+0

не совсем, поэтому у меня есть студенты и компоненты отщепляются в размерах, так что будет что-то вроде выбора StudentDwKey, ClassDwKey, CollegeDwKey, SubjectDwKey из DimStudent JOIN DimClass, DimCollege, DimSubject. Нет никакой связи между таблицами Dim, поскольку они отделяются от компонента (в той же таблице) по типу компонентов. поэтому никаких отношений между студентами и таблицами измерений, отношения через studentcomponent ... – jhowe

+0

@jhowe - Я думаю, вам придется предоставить некоторые примеры данных и результаты, которые вы хотите получить из этого примера. Возможно, используя www.sqlfiddle.com, чтобы это стало ясно? – MatBailie

+0

Привет, мне потребуется возраст, чтобы создать образцы данных и т. Д., Позвольте мне посмотреть, могу ли я сделать это более понятным. Если я не пойду на скрипт sql. Спасибо за вашу помощь. – jhowe

1

Держи студент деталь в таблице Стьюдента (которые вы сделали) и составные детали в таблице компонентов (которые вы еще не сделали) и использовать таблицу StudentComponent, чтобы связать их вместе. Что-то вроде этого:

CREATE DATABASE TEST 
USE TEST 

CREATE TABLE Student 
    (
     StudentID INT IDENTITY 
        PRIMARY KEY , 
     FirstName NVARCHAR(50) , 
     LastName NVARCHAR(50) 
    ) 

CREATE TABLE StudentComponent 
    (
     StudentComponentID INT IDENTITY 
          PRIMARY KEY , 
     StudentID INT FOREIGN KEY REFERENCES dbo.Student(StudentID) , 
     ComponentID INT FOREIGN KEY REFERENCES dbo.Component(ComponentID), 
    ) 

CREATE TABLE Component 
    (
     ComponentID INT IDENTITY 
         PRIMARY KEY , 
     ComponentName NVARCHAR(50) , 
     ComponentRef NVARCHAR(50) , 
     ComponentType NCHAR(2) 
    ) 
+0

hi no Это исходные таблицы из системы. Я вытаскиваю данные из них, разбиваясь на размеры и пытаясь вставить в таблицу фактов. – jhowe

Смежные вопросы