Выберите данные из другой таблицы на основе значения поля - PullRequest
0 голосов
/ 02 июля 2019

У меня есть три таблицы, и я хочу гибко объединить данные из этих трех на основе значения из поля одной таблицы.

Это для системы самооценки и управленческой оценки.Я пробовал решения из других постов здесь, но поскольку моя структура данных отличается от других, у меня не работало ни одной.

Таблицы выглядят так:

Tokens: SubmitterID, SubjectID, Origin, Token
Submitters: ID, FullName, Email
Subjects: ID, FullName, Email

В таблице токенов:

  • Если Origin равен 1, SubmitterID и SubjectID одинаковы и получены от Submitters (Управленческая самооценка).
  • Если Origin равен 2, SubmitterID и SubjectID одинаковы и получены от Subjects (Самооценка сотрудниками).
  • Если Origin равен 3, SubmitterID поступает от Submitters и SujbectID от Subjects.

Мне нужен запрос, чтобы получить следующее:

Полное имя отправителя и субъекта, адрес электронной почты отправителя и токен.У меня пока нет фактического вывода, потому что я не смог написать этот запрос.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

В этом случае вы СОЕДИНЯЕТЕ свою таблицу со всеми возможными опциями (как Отправителями, так и Субъектами), а затем возвращаете желаемые значения, используя условное (CASE), зависящее от исходного значения.

SELECT T.Token, 
       CASE Origin
            WHEN 1 THEN SM_Submitter.Fullname
            WHEN 2 THEN SJ_Submitter.Fullname
            WHEN 3 THEN SM_Submitter.Fullname
       END AS SubmitterFullName,
       CASE Origin
            WHEN 1 THEN SM_Subject.Fullname
            WHEN 2 THEN SJ_Subject.Fullname
            WHEN 3 THEN SJ_Subject.Fullname
       END AS SubjectFullName, 
       CASE Origin
            WHEN 1 THEN SM_Submitter.Email
            WHEN 2 THEN SJ_Submitter.Email
            WHEN 3 THEN SM_Submitter.Email
       END AS SubmitterEmail
FROM   dbo.Tokens AS T
       LEFT OUTER JOIN dbo.Submitters AS SM_Submitter ON SM_Submitter.ID = T.SubmitterID
       LEFT OUTER JOIN dbo.Submitters AS SM_Subject ON SM_Subject.ID = T.SubjectID
       LEFT OUTER JOIN dbo.Subjects AS SJ_Submitter ON SJ_Submitter.ID = T.SubmitterID
       LEFT OUTER JOIN dbo.Subjects AS SJ_Subject ON SJ_Subject.ID = T.SubjectID
0 голосов
/ 02 июля 2019

SELECT * FROM токенов ПРИСОЕДИНЯЙТЕСЬ, что Авторы отправляют ON token.SubmitterId = submit.ID ПРИСОЕДИНЯЙТЕСЬ К СУБЪЕКТАМ subj ON token.SubjectID = subj.ID

Можете ли вы попробовать этот запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...