Перекрестная ссылка TSQL Join

Скажем, у меня есть четыре стола

1) Студенты:

  • Студенческий билет
  • Имя
  • Фамилия

2) Контакт (Возьмем последний предмет)

  • Contact_ID
  • Адрес
  • Почтовый Индекс
  • Дата Добавлена

3) Телефон (Возьмем последние три пункта)

  • Contact_ID
  • Телефонный номер
  • Дата Добавлена

4) Контактная ссылка студента

  • Студенческий билет
  • Contact_ID

Как я могу запросить эту таблицу? Я хочу иметь поля, как показано ниже:

  • Студенческий билет
  • Имя
  • Фамилия
  • Адрес
  • Почтовый Индекс
  • Номер телефона1
  • Номер телефона2
  • Номер телефона3

person Bill Daugherty    schedule 09.06.2009    source источник
comment
Ваши таблицы было бы намного проще запрашивать, если бы вы могли сделать так, чтобы телефон имел Phone_Contact_ID, отличный от Contact_ID... или если бы вы могли добавить поле «тип» в таблицу StudentContactRef, чтобы указать, ссылаетесь ли вы на контакт или Телефонный номер   -  person John Fiala    schedule 09.06.2009


Ответы (1)


select
    s.Student_ID,
    s.FirstName,
    s.LastName,
    c.Contact_ID,
    c.Address,
    c.ZipCode,
    p.PhoneNumber1,
    p.PhoneNumber2,
    p.PhoneNumber3
from
    Students s
    inner join StudentContactRef r on
        s.Student_ID = r.StudentID
    inner join Contact c on
        r.Contact_ID = c.Contact_ID
    inner join
        (select top 3 Contact_ID, PhoneNumber from Phone 
         pivot (PhoneNumber for PhoneNumber IN 
             (PhoneNumber1, PhoneNumber2, PhoneNumber3) 
         where Contact_ID = r.Contact_ID order by DateAdded desc) p on
        r.Contact_ID = p.Contact_ID

Обновление: это должно дать вам то, что вы ищете!

person Eric    schedule 09.06.2009